2013-10-15 8 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

Query1

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 

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

Я добавил еще один запрос с добавленной 3-й колонкой. Надеюсь, это будет полезно. –

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   
Смежные вопросы