我需要制作一个SQL函数,它将x列数和y行数组合到1列中,并用逗号分隔并按字母顺序排序。用于将列组合为一个的SQL函数
例
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
我试图寻找,但我无法找到任何解决方案,不包括列被硬编码。
我需要制作一个SQL函数,它将x列数和y行数组合到1列中,并用逗号分隔并按字母顺序排序。用于将列组合为一个的SQL函数
例
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)
如果答案需要在单行和单列中,那么? –
@Ajmot http://sqlfiddle.com/#!6/7be162/2 –
添加[支持数字排序](http://sqlfiddle.com/#!6/8fcb3/1/0),它会工作完美;) – lad2025
给出的信息是不是sufficient.In事实,是不问question.You刚才问一部分的方式问题在哪里你被击中。 在这种情况下,您也可以在没有逻辑的情况下获得解决方案。
你为什么在寻找那个输出?
试试这个,
declare @t table(col1 varchar(50),col2 varchar(50),
col3 varchar(50),col4 varchar(50))
insert into @t values ('1', '2' , '3' , '4')
,('A' , 'B' , 'C' , 'D')
,('E' , 'F' , 'G' , 'H')
,('I' , 'J' , 'K' , 'L')
select col1 from @t where col1='1'
union all
select col1+','+col2+','+col3+','+col4
from @t
where col1<>'1'
为什么是一个问题 “栏目中被硬编码”? –
这是一个问题,因为我有很多列,需要多次执行此操作。因此,每次写入100列以上的功能都没有趣:) – TangoDurango
所以使用SQL来生成SQL。你不能在一个函数中使用动态SQL,但你仍然可以在设计时对'sys.columns'执行查询来生成所需的SQL。它将比通过XML往返更好。 –