我需要製作一個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往返更好。 –