当SQL共享公共标识符时,SQL将两行中的数据组合成一行

时间:2014-05-07 18:22:11

标签: sql sql-server join report

对于我正在处理的报告,我需要根据它们在单独列中共享的数据来合并特定列中行的数据。所有数据都来自同一个表:

      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词汇。我无法想到如何清楚地表达代码才能做到这一点。任何有关逻辑的帮助都会非常感激!

戴夫

1 个答案:

答案 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           ║
╚═══════╩══════════════════════╝