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)
编辑 - 删除第三列中的尾随空格
既然你说汇总字段不一定好看,试试这个:
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)