簡體   English   中英

T-SQL串聯多行

[英]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)

您可以使用STUFFFOR XML PATH用逗號之類的分隔符來連接列值列表。

在這種情況下,您需要以嵌套的方式進行操作,一次是將特定block的日期連接起來,然后是根據class進一步將其連接起來

同樣,在GUI層中這樣做更好,因為這種操作會帶來性能問題。

SQL小提琴

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM