我需要创建一个 SQL 函数,将 x 列和 y 行组合成 1 列,行以逗号分隔并按字母顺序排序。
例子
1 2 3 4
A B C D
E F G H
I J K L
应该变成
1
A,B,C,D
E,F,G,H
I,J,K,L
我尝试搜索,但找不到任何不包含硬编码列的解决方案。
最佳答案
我不清楚您为什么要避免对列进行硬编码,但这可行 ( based on idea here )。
SELECT SUBSTRING(concatenated, 2, 0 + 0x7FFFFFFF)
FROM YourTable C
CROSS APPLY (SELECT ',' + t.c.value('.', 'NVARCHAR(128)')
FROM (SELECT (SELECT C.*
FOR XML RAW, TYPE) AS x)v
CROSS APPLY v.x.nodes('row/@*') AS t(c)
ORDER BY t.c.value('.', 'NVARCHAR(128)')
FOR XML PATH('')) CA(concatenated)
也可以跨行连接
SELECT SUBSTRING(concatenated, 2, 0 + 0x7FFFFFFF)
FROM (SELECT ',' + t.c.value('.', 'NVARCHAR(128)')
FROM (SELECT (SELECT *
FROM YourTable
FOR XML RAW, TYPE) AS x)v
CROSS APPLY v.x.nodes('row/@*') AS t(c)
ORDER BY t.c.value('.', 'NVARCHAR(128)')
FOR XML PATH('')) CA(concatenated)
关于将列合并为一个的 SQL 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32549461/