sql - 在单个文本中将 SQL 表行与条件连接起来

标签 sql sql-server sql-server-2008

我有一个像这样的 SQL

col1     col2      col3
1         0         1
1         1         1
0         1         1
1         0         0
0         0         0

我期待这样的输出

col1     col2      col3     NewCol
1         0         1        SL,PL
1         1         1        SL,EL,PL
0         1         1        EL,PL
1         0         0        SL
0         0         0        NULL

条件是 if col1>0 then SL else ' ', if col2>0 EL else ' ', if col3>0 PL else ' '

我尝试使用 Concatenate many rows into a single text string?却没能很好的达到预期的效果

我已经尝试过它可以很好地处理一条消息

Invalid length parameter passed to the LEFT or SUBSTRING function.

WITH CTE AS (
   SELECT col1, col2, col3,
          CASE WHEN col1 > 0 THEN 'SL,' ELSE '' END +
          CASE WHEN col2 > 0 THEN 'EL,' ELSE '' END +
         CASE WHEN col3 > 0 THEN 'PL,' ELSE '' END AS NewCol
   FROM   Employee
)
SELECT col1, col2, col3,
       substring(NewCol, 1, len(NewCol) - 1) AS NewCol
FROM   CTE

但是如果所有列都为 0,那么我的最后一个条件再次不匹配,那么我必须根据所需的输出显示 NULL

找到附加 fiddle http://sqlfiddle.com/#!6/2bd6a/1

最佳答案

您的代码示例的问题在于,当所有列都为 0 时,长度为 0,子字符串函数将抛出错误。

使用nullif 修复它:substring(NewCol, 1, len(nullif(NewCol,'')) - 1) AS NewCol

关于sql - 在单个文本中将 SQL 表行与条件连接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32666890/

相关文章:

SQL - 仅选择具有多个条目的结果

sql - 如何在数字的最后两位数字之前放置小数点

javascript - 是否有用于 localStorage 的 Javascript 库来模拟 SQLite

sql-server - 主键和身份有什么区别?

php - undefined index 错误 - 为什么这仍然适用于错误抑制?

sql azure查询耗时

SQL Server 占用完整内存后速度完全变慢

sql - 获取一列中的项目数及其值

php - 如何避免某个 php 部分的多次回显?

sql - 您如何知道 SQL 数据库何时需要更多规范化?