1
我正在使用SQL Server 2008.我試圖編寫一個使用STUFF和FOR XML PATH的select語句在一個字段中創建逗號分隔的字符串。只有一個記錄,但有31個字段。對於具有多個字段的XML路徑的SQL東西
我從1個表中獲取數據,每個月的每一天都有一個smallint字段--0表示當天不是,1表示是。 (我沒有設計這個表,不幸的是,我不能改變它。)像這樣:
z1st z2nd z3rd z4th z5th z6th z7th z8th z9th z10th
------ ------ ------ ------ ------ ------ ------ ------ ------ ------
0 1 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 1
0 0 1 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 1
等等,通過z31st一路。
我的語句傳遞整數變量@order_snbr和@admin_nbr,它總是返回一行。
DECLARE @strSelectedDayList AS VARCHAR(MAX)
SELECT @strSelectedDayList = STUFF((SELECT ', ' + CASE WHEN td1.z1st = 1 THEN '1st' END
, CASE WHEN td1.z2nd = 1 THEN '2nd' END
, CASE WHEN td1.z3rd = 1 THEN '3rd' END
, CASE WHEN td1.z4th = 1 THEN '4th' END
, CASE WHEN td1.z5th = 1 THEN '5th' END
, CASE WHEN td1.z6th = 1 THEN '6th' END
, CASE WHEN td1.z7th = 1 THEN '7th' END
, CASE WHEN td1.z8th = 1 THEN '8th' END
, CASE WHEN td1.z9th = 1 THEN '9th' END
, CASE WHEN td1.z10th = 1 THEN '10th' END
, CASE WHEN td1.z11th = 1 THEN '11th' END
, CASE WHEN td1.z12th = 1 THEN '12th' END
, CASE WHEN td1.z13th = 1 THEN '13th' END
, CASE WHEN td1.z14th = 1 THEN '14th' END
, CASE WHEN td1.z15th = 1 THEN '15th' END
, CASE WHEN td1.z16th = 1 THEN '16th' END
, CASE WHEN td1.z17th = 1 THEN '17th' END
, CASE WHEN td1.z18th = 1 THEN '18th' END
, CASE WHEN td1.z19th = 1 THEN '19th' END
, CASE WHEN td1.z20th = 1 THEN '20th' END
, CASE WHEN td1.z21st = 1 THEN '21st' END
, CASE WHEN td1.z22nd = 1 THEN '22nd' END
, CASE WHEN td1.z23rd = 1 THEN '23rd' END
, CASE WHEN td1.z24th = 1 THEN '24th' END
, CASE WHEN td1.z25th = 1 THEN '25th' END
, CASE WHEN td1.z26th = 1 THEN '26th' END
, CASE WHEN td1.z27th = 1 THEN '27th' END
, CASE WHEN td1.z28th = 1 THEN '28th' END
, CASE WHEN td1.z29th = 1 THEN '29th' END
, CASE WHEN td1.z30th = 1 THEN '30th' END
, CASE WHEN td1.z31st = 1 THEN '31st' END
FROM TableDays td1 WITH(NOLOCK)
WHERE td1.order_snbr = td2.order_snbr
AND td1.admin_nbr = td2.admin_nbr
FOR XML PATH('')), 1, 1, '')
FROM TableDays td2 WITH(NOLOCK)
WHERE td2.order_snbr = @order_snbr
AND td2.admin_nbr = @admin_nbr
PRINT @strSelectedDayList
這將產生一個結果,像這樣:
1st14th28th
我想是這樣的:
1st, 14th, 28th
任何幫助,將不勝感激!如果有更好的方法來做到這一點(沒有STUFF或FOR XML PATH),我很樂意切換。
這真是聰明! – n8wrl
@ n8wrl噓......別告訴我的妻子。她會要我做東西。 –
太棒了!像夢一樣工作.... –