[英]T-SQL concatenating multiple rows
我正在嘗試將一個單獨的表連接到我的結果中,但是與我讀過的其他一些問題不太一樣。 有一個類表:
ClassID
-------
1
2
3
和時間表
ClassID Block Day
------- ----- ---
1 5 1
1 4 2
1 5 2
2 2 1
2 3 2
3 1 1
3 1 2
3 1 3
我想要的輸出是按類將所有天數按塊分組,並匯總為一行,如下所示:
ClassID Schedule
------- --------
1 5(1,2) 4(2)
2 1(2) 2(3)
3 1(1,2,3)
這可能嗎? 另一個可以接受的(可能更容易)的輸出是
ClassID Schedule
------- --------
1 5(1) 5(2) 4(2)
2 1(2) 2(3)
3 1(1) 1(2) 1(3)
您可以使用STUFF
和FOR XML PATH
用逗號之類的分隔符來連接列值列表。
在這種情況下,您需要以嵌套的方式進行操作,一次是將特定block
的日期連接起來,然后是根據class
進一步將其連接起來
同樣,在GUI層中這樣做更好,因為這種操作會帶來性能問題。
select classId, stuff(
(select distinct ' ' + T2.block + '(' +
stuff((select ','+ T1.Day
from Table1 T1
where T1.classId = T2.classId
and T1.Block = T2.Block
FOR XML PATH ('')),
1,1,'') +')'
from Table1 T2
where T2.classId = T.classId
for xml path('')), 1,1,'')
from Table1 T
group by classId
采用:
select ClassID
,
stuff
((
select ' ' + t1.Block + '(' +
stuff
((
select ',' + t2.Day
from table1 t2
where t2.ClassID = t.ClassID and t2.Block = t1.Block
for xml path('')
), 1, 1, '') + ')'
from table1 t1
where t1.ClassID = t.ClassID
group by t1.Block
for xml path('')
), 1, 1, '')
from table1 t
group by t.ClassID
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.