SQL合并相似的行和Concat某些列

时间:2019-03-14 15:21:03

标签: sql tsql

我有一张桌子,看起来像:

ID-----Name-----Version
1 | TestX | 1.2
2 | TestX | 1.2
3 | TestX | 1.2
4 | TestX | 1.3
5 | TestX | 1.3

我需要根据名称和版本进行查询,结果如下:

ID-----Name-----Version
1,2,3 | TestX | 1.2
4,5   | TestX | 1.3

我无法弄清楚如何使concat正常工作。

1 个答案:

答案 0 :(得分:0)

您可以使用FOR XML PATH()

SELECT DISTINCT STUFF(tt.id, 1, 1, '') AS ID, t.Name, t.Version
FROM table t CROSS APPLY
     (SELECT ', ' + t1.id
      FROM table t1 
      WHERE t1.Name = t.Name AND t1.version = t.Version 
      FOR XML PATH('')
     ) tt(id);

如果您正在使用SQL Server的最新版本,则可以使用STRING_AGG()

SELECT STRING_AGG(ID, ', ') as ID, Name, Version
FROM table t
GROUP BU Name, Version;