对于我正在处理的报告,我需要根据它们在单独列中共享的数据来合并特定列中行的数据。所有数据都来自同一个表:
ID | Name |
10000 Jane Doe
10000 John Smith
50000 Jack Bauer
50000 Jon Snow
90000 Jack Bauer
当他们共享一个公共ID值时,我需要以某种方式将Name行组合在一起:
ID | Name |
10000 Jane Doe, John Smith
50000 Jack Bauer, Jon Snow
90000 Jack Bauer
该表不是此表的primary key
,但它是我需要的报表上的唯一值。
我大部分都是自学成才,并且肯定缺乏完美的SQL
词汇。我无法想到如何清楚地表达代码才能做到这一点。任何有关逻辑的帮助都会非常感激!
戴夫
答案 0 :(得分:5)
测试数据
DECLARE @TABLE TABLE (ID INT, Name VARCHAR(50))
INSERT INTO @TABLE VALUES
(10000,'Jane Doe'),
(10000,'John Smith'),
(50000,'Jack Bauer'),
(50000,'Jon Snow'),
(90000,'Jack Bauer')
<强>查询强>
SELECT t.ID
,STUFF((SELECT ', ' + Name
FROM @Table
WHERE ID = t.ID
FOR XML PATH(''),TYPE)
.value('.','NVARCHAR(MAX)'),1,2,'') AS Names
FROM @TABLE t
GROUP BY t.ID
结果集
╔═══════╦══════════════════════╗
║ ID ║ Names ║
╠═══════╬══════════════════════╣
║ 10000 ║ Jane Doe, John Smith ║
║ 50000 ║ Jack Bauer, Jon Snow ║
║ 90000 ║ Jack Bauer ║
╚═══════╩══════════════════════╝