我正在查看以下链接:
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
答案 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
不是必需的,除非您有重复项。