[英]How to manipulate concatenated columns in SQL
說我有以下數據集
WITH dataset (hno,sorder,level,dummy,maxorder) AS
(
SELECT 1, 1, 'val1', 'NULL1', 5 FROM dual UNION ALL
SELECT 1, 2, 'val2', 'NULL2', 5 FROM dual UNION ALL
SELECT 1, 3, 'val3', 'NULL3', 5 FROM dual UNION ALL
SELECT 1, 4, 'val4', 'NULL4', 5 FROM dual UNION ALL
SELECT 1, 5, 'val5', 'NULL5', 5 FROM dual)
SELECT *
FROM dataset;
HNO SORDER LEVEL DUMMY MAXORDER
1 4 val4 NULL4 5
1 2 val2 NULL2 5
1 3 val3 NULL3 5
1 1 val1 NULL1 5
1 5 val5 NULL5 5
我需要另外一列稱為TEXT
HNO SORDER LEVEL DUMMY MAXORDER TEXT
1 4 val4 NULL4 5 val1,val2,val3,val4,NULL5
1 2 val2 NULL2 5 val1,val2,NULL3,NULL4,NULL5
1 3 val3 NULL3 5 val1,val2,val3,NULL4,NULL5
1 1 val1 NULL1 5 val1,NULL2,NULL3,NULL4,NULL5
1 5 val5 NULL5 5 val1,val2,val3,val4,val5
這個想法是為SQL操作動態占位符。 因此,如果排序順序在1 ... n之間,那么對於SORDER
值x,我需要將列LEVEL
值從1返回到x,然后從虛擬值將x + 1返回到n,並將它們全部連接為逗號分隔值,最重要的是所有值都在一個SQL中。 此最大訂單數可以是任意數量,並且不是固定的。 WX2缺少遞歸CTE,這使它變得困難。
有指針嗎?
此函數根據您描述的邏輯將字符串連接起來(test是帶有數據的表的名稱):
CREATE FUNCTION Concatenate_string
(
@sorder int
)
RETURNS varchar(1000)
AS
BEGIN
-- Declare the return variable here
DECLARE @result varchar(1000)=''
declare @i int=1
while @i<=(select max(sorder) from test)
begin
set @result=@result + (select case when @i <= @sorder then level else dummy end+',' from test where sorder=@i)
set @i=@i+1
end
return @result
END
GO
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.