用于将列组合成一个的SQL函数

Tan*_*ngo 2 sql sql-server

我需要创建一个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)

我尝试搜索,但我找不到任何不包括硬编码列的解决方案.

Mar*_*ith 6

我不清楚为什么你要避免硬编码列,但这是有效的(基于这里的想法).

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)

SQL小提琴

还要跨越您可以使用的行连接

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)