我有一个表 CommentsTable ,其中包含 CommentA, CommentB, CommentC, CommentD, CommentE 之类的列。

所有评论列都是 VARCHAR (200) ,默认情况下所有列也是 NULL

数据看起来像:

CommentId   CommentA    CommentB    CommentC    CommentD    CommentE
---------------------------------------------------------------------
12345       NULL        C 001       C 002       NULL        C 003
45678       C 005       NULL        NULL        C 007       NULL
67890       C 010       NULL        C 011       C 012       NULL
36912       C 021       C 023       C 024       C 025       C 026

我需要避免空值,其余值与 comma 连接。

因此,预期的输出如下:
CommentId    CommetDetails
-------------------------------
12345        C 001, C 002, C 003
45678        C 005, C 007
67890        C 010, C 011, C 012
36912        C 021, C 023, C 024, C 025, C 026

我试过简单的查询:
SELECT CommentId, ISNULL(CommentA, '') + ', ' + ISNULL(CommentB, '') + ', ' +
       ISNULL(CommentC, '') + ', ' + ISNULL(CommentD, '') + ', ' +
       ISNULL(CommentE, '') [CommentDetails]
FROM CommentsTable
WHERE ...... --Some conditions

但是出现了不需要的comma,所以添加了IIF
SELECT CommentId,
       IIF(ISNULL(CommentA, '') <> '', (CommentA + ', '), '') +
       IIF(ISNULL(CommentB, '') <> '', (CommentB + ', '), '') +
       IIF(ISNULL(CommentC, '') <> '', (CommentC + ', '), '') +
       IIF(ISNULL(CommentD, '') <> '', (CommentD + ', '), '') +
       ISNULL(CommentE, '') [CommentDetails]
FROM CommentsTable
WHERE ...... --Some conditions

但在这里,在某些情况下,comma 出现在最后一个位置(如果 CommentD, CommetENULL

有什么办法可以解决所有情况。

Sample SQL Fiddle

最佳答案

您可以像这样使用 ISNULL ISNULL(',' + CommentA, '') 并像这样编写查询。

SELECT CommentId,
STUFF(
ISNULL(',' + CommentA, '') +
ISNULL(',' + CommentB, '') +
ISNULL(',' + CommentC, '') +
ISNULL(',' + CommentD, '') +
ISNULL(',' + CommentE, ''),1,1,'') as [CommentDetails]
FROM CommentsTable
WHERE ...... //Some conditions

SQL Fiddle 中查看结果。

10-05 19:19