如何使用Group By连接来自不同行的列

时间:2014-05-23 18:41:29

标签: sql tsql sql-server-2012

我正在尝试将3个不同行的3列连接成ID

的一行分组
ID  Col1    Col2    Col3
5   NULL    Test2   NULL
5   Test1   NULL    NULL
5   NULL    NULL    Test3

进入

ID  FinalColumn
5   Test1, Test2, Test3

感谢!!!

P.S。值不必具有任何特定顺序。结果也可以是Test2,Test3,Test1

1 个答案:

答案 0 :(得分:4)

SELECT ID, ISNULL(MAX(Col1),'') +','+ ISNULL(MAX(Col2),'') +','+ ISNULL(MAX(Col3),'') AS FinalColumn
FROM tbl
GROUP BY ID

编辑:更新以考虑任何(或所有)字段中NULL值的潜在可能性:我可能会过度思考这一点,但这可能有所帮助。下面的代码示例与我的想法,如果你知道你没有NULL,可以随意忽略。

DECLARE @tbl TABLE (ID INT IDENTITY(1,1), Col1 VARCHAR(20), Col2 VARCHAR(20), Col3 VARCHAR(20))
INSERT @tbl --(Col1, Col2, Col3)
values 
(NULL, NULL, NULL),
(NULL, '2', '3'),
('1', '2', '3'),
('4', '5', NULL),
('1', NULL, NULL);

SELECT  
    ID, 
    LEFT(
        ISNULL(MAX(Col1 + ','),'') + ISNULL(MAX(Col2 +','),'')+ ISNULL(MAX(Col3 + ','),''), 
        ISNULL(NULLIF(LEN(ISNULL(MAX(Col1 + ','),'') + ISNULL(MAX(Col2 +','),'')+ ISNULL(MAX(Col3 + ','),'')),0),1) -1
        ) AS FinalColumn
FROM @tbl
GROUP BY ID