我有一个像这样的 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/