我需要创建一个SQL函数,它将x个列和y个行组合成1列,行以逗号分隔并按字母顺序排序.
例
1 2 3 4
A B C D
E F G H
I J K L
Run Code Online (Sandbox Code Playgroud)
应该变成
1
A,B,C,D
E,F,G,H
I,J,K,L
Run Code Online (Sandbox Code Playgroud)
我尝试搜索,但我找不到任何不包括硬编码列的解决方案.
我不清楚为什么你要避免硬编码列,但这是有效的(基于这里的想法).
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)
Run Code Online (Sandbox Code Playgroud)
还要跨越您可以使用的行连接
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |