2

t1 と t2 のような 2 つのテーブルがあります。t1

ID                          class name
--                          -----------
1                            basket weaving
2                            Underwater Basketing

t2
ID                            POS     DAYS
--                            ----    -----
1                              1      M
1                              2      T
1                              3      W
1                              4     TH
1                              5      F
2                              1      M
2                              2      W
2                              3      F

両方のテーブルから次の出力を取得したいと考えています。

1                             class                  DAYS
--                            -----                  -----
1                             BASKET WEAVING         MTWTHF
2                             Underwater basketing   MWF
4

2 に答える 2

3

クエリ1

SELECT ID, [class name], STUFF(List, 1 ,2, '') [DAYS]
    FROM Table1 T1 CROSS APPLY 
                            (
                            SELECT ', ' + [DAYS] [text()]
                            FROM Table2
                            WHERE ID = T1.ID
                            FOR XML PATH('')
                            ) T2(List)

結果

ID                            class name             DAYS
--                            -----                  -----
1                             BASKET WEAVING         M,T,W,TH,F
2                             Underwater basketing   M,W,F

カンマで区切られた日のリストが表示されます。カンマなしで次の
Query2を使用できます。

SELECT ID, [class name], List [DAYS]
FROM Table1 T1 CROSS APPLY 
                        (
                        SELECT  [DAYS] [text()]
                        FROM Table2
                        WHERE ID = T1.ID
                        FOR XML PATH('')
                        ) T2(List)

結果

ID                            class name             DAYS
--                            -----                  -----
1                             BASKET WEAVING         MTWTHF
2                             Underwater basketing   MWF

クエリ3

SELECT ID, [class name], STUFF(List, 1 ,2, '') [DAYS], STUFF(T3.Rooms, 1 ,2, '') [Rooms]
FROM Table1 T1 CROSS APPLY 
                            (
                            SELECT ', ' + [DAYS] [text()]
                            FROM Table2
                            WHERE ID = T1.ID
                            FOR XML PATH('')
                            ) T2(List)
               CROSS APPLY 
                        (
                        SELECT '/' + Rooms [text()]
                        FROM Table2
                        WHERE ID = T1.ID
                        FOR XML PATH('')
                        ) T3(Rooms)

このようなことを行うことで別の列を追加できます.....

于 2013-10-15T20:03:52.363 に答える
0

既知の間隔で値を集計する場合は、ピボット テーブルを使用する必要があります。値の組み合わせを持つ 1 つのフィールドが必要な場合は、FOR XML PATH を使用することをお勧めします。ピボットを使用した出力は次のようになります。

Class ID   Class Name    Monday    Tuesday    Wednesday    Thursday   Friday...
1          Class 1       1         1          1            0          0
2          Class 2       0         0          0            1          0        
于 2013-10-15T20:09:51.147 に答える