2013-10-15 92 views
2

我有两个表,如t1和t2。 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 

回答

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 

它会给你一个逗号分隔的天列表,如果你想与一些逗号,你可以使用下面的
查询2

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 

QUERY3

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) 

你可以做这样的事情添加另一列.....

+0

可以这样做以返回更多。例如,如果我向t2添加了第四列称为房间,我想返回以下1 BASKET WEAVING MTWTHF 103/104/105/106/107 – user2883955

+0

我已经添加了第三列添加了房间的另一个查询,希望这会有所帮助。 –

0

你会想aggr时使用数据透视表在知道的时间间隔内产生一些价值。如果你想要一个字段与值的组合,我会推荐使用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