SQL - 两列上的区别和第三列的汇总值

San*_*rus 4 sql sql-server select distinct

我有一个包含3个不同ID的表.我想对第1列和第2列进行区分,并总结第3列的值(进入一个字段 - 可能是逗号分隔的字符串).汇总字段不必"看起来很好"(没有问题:'4,3,'(最后逗号)).我正在使用MS SQL Server 2008.

例如:

ID1  ID2  ID3
 1    1    5
 1    1    8
 1    2    5
 1    2    8
 2    3   10
 2    3   11
 2    5   12
Run Code Online (Sandbox Code Playgroud)

选择 ...?

结果:

ID1   ID2   Summary
 1     1      5,8
 1     2      5,8
 2     3      10,11
 2     5      12
Run Code Online (Sandbox Code Playgroud)

Lit*_*les 5

编辑 - 删除第三列中的尾随空格

既然你说汇总字段不一定好看,试试这个:

SELECT M1.ID1, M1.ID2,
(
    SELECT convert(nvarchar(50), ID3) + ',' 
    FROM MyTable M2
    WHERE M1.ID1 = M2.ID1 AND M1.ID2 = M2.ID2
    FOR XML PATH('')
) M1
FROM MyTable M1
GROUP BY M1.ID1, M1.ID2
Run Code Online (Sandbox Code Playgroud)

假设您的表名称为"MyTable".此查询最后会生成逗号,但应该让您入门.使用我的测试数据库,这是输出:

ID1 ID2  M1
1   1   5,8,
1   2   5,8,
2   3   10,11,
2   5   12,
Run Code Online (Sandbox Code Playgroud)

如果你想要清理它,这应该工作(虽然查询本身是丑陋的):

SELECT ID1, ID2, left(M1, len(M1) - 1) AS M1
FROM
(
    SELECT M1.ID1, M1.ID2,
    (
        SELECT convert(nvarchar(50), ID3) + ',' 
        FROM MyTable M2
        WHERE M1.ID1 = M2.ID1 AND M1.ID2 = M2.ID2
        FOR XML PATH('')
    ) M1
    FROM MyTable M1
    GROUP BY M1.ID1, M1.ID2
) CleanedUp
Run Code Online (Sandbox Code Playgroud)