STUFF函数可以返回NULL值吗?

时间:2016-07-28 20:45:44

标签: sql sql-server isnull for-xml-path

我正在查看以下链接:

Can I Comma Delimit Multiple Rows Into One Column?

解决方案中使用的查询正是我需要的,但也需要返回NULL值。

SELECT t.TicketID,
   STUFF(ISNULL((SELECT ', ' + x.Person
            FROM @Tickets x
           WHERE x.TicketID = t.TicketID
        GROUP BY x.Person
         FOR XML PATH (''), TYPE).value('.','VARCHAR(max)'), ''), 1, 2, '') [No Preceeding Comma]
FROM @Tickets t
GROUP BY t.TicketID

如果每个[TicketID]都有一个关联的[Person],这个效果很好。

但是如果Person为NULL,对于TicketID,我只需返回TicketID并将Person显示为NULL或空白。我无法干净地移除ISNULL。

由此:

[TicketID], [Person]
 T0001       Alice
 T0001       Bob
 T0002       Catherine
 T0002       Doug
 T0003       Elaine
 T0004       NULL

对此:

[TicketID], [Person]
 T0001       Alice, Bob
 T0002       Catherine, Doug
 T0003       Elaine
 T0004       NULL

1 个答案:

答案 0 :(得分:0)

这是你想要的吗?

SELECT t.TicketID,
        STUFF((SELECT ', ' + COALESCE(t2.Person, '<NULL>')
               FROM @Tickets t2
               WHERE t2.TicketID = t.TicketID
               FOR XML PATH (''), TYPE
              ).value('.', 'VARCHAR(max)'
                     ), 1, 2, ''
             ) as Persons
FROM @Tickets t
GROUP BY t.TicketID;

子查询中的GROUP BY不是必需的,除非您有重复项。