我需要从3列中获取值并将它们分组为1列,以逗号分隔:
2014-01-01,2014-01-29
Run Code Online (Sandbox Code Playgroud)
问题是一个或多个列可能为NULL,因此它会使逗号混乱:
2014-01-01,,2014-01-29
Run Code Online (Sandbox Code Playgroud)
这就是我编码的方式(case语句基本上只是删除逗号,如果它是字符串中的最后一个字符.
我需要添加一些逻辑,以便它考虑到NULL,但我很难想出它.
CASE WHEN RIGHT(ISNULL(d.FirstGapDate + ',', '') + ISNULL(d.PayrollGapDate + ',', '') + d.LastGapDate, 1) = ','
THEN LEFT(ISNULL(d.FirstGapDate + ',', '') + ISNULL(d.PayrollGapDate + ',', '') + d.LastGapDate, LEN(ISNULL(d.FirstGapDate + ',', '') + ISNULL(d.PayrollGapDate + ',', '') + d.LastGapDate) - 1)
ELSE ISNULL(d.FirstGapDate + ',', '') + ISNULL(d.PayrollGapDate + ',', '') + d.LastGapDate
END AS AlLGapDatesFormatted
Run Code Online (Sandbox Code Playgroud)
编辑 -
我需要对突出显示进行分组(注意PayrollGapDate是''):

这就是我得到的:

这是我实施的代码:

尝试使用这种技术:
SET CONCAT_NULL_YIELDS_NULL ON --<<<make sure concatenations with NULL result in NULL
DECLARE @C1 varchar(10)='AAA'
,@C2 varchar(10)='BBB'
,@C3 varchar(10)=null
,@C4 varchar(10)='DDD'
SELECT STUFF( ISNULL(', '+@C1,'')
+ISNULL(', '+@C2,'')
+ISNULL(', '+@C3,'')
+ISNULL(', '+@C4,'')
,1,2,''
)
Run Code Online (Sandbox Code Playgroud)
输出:
-----------------------------------------------
AAA, BBB, DDD
(1 row(s) affected)
Run Code Online (Sandbox Code Playgroud)
您将', '+@C3结果保留为NULL,将其ISNULL(***,'')转换为空字符串.该STUFF(***,1,2,'')删除前导逗号和空格.
尝试:
SELECT STUFF( ISNULL(', '+d.FirstGapDate,'')
+ISNULL(', '+d.PayrollGapDate,'')
+ISNULL(', '+d.LastGapDate,'')
,1,2,''
)
FROM ...
WHERE...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |