2015-06-24 2 views
3

Я пытаюсь соединить две таблицы, а затем разобрать результаты в отдельных колонках, как так:Как отображать результаты SQL JOIN как отдельные столбцы?

Table1:

Customer_ID 
---------- 
1 
2 
3 

Table2:

Customer_ID ListID 
------------------ 
1   1 
1   2 
1   5 
2   1 
2   3 

Желательные Результаты:

Customer_ID ListID1 ListID2 ListID3 
----------------------------------- 
1   1  2  5 
2   1  3 
3 

Я использовал LEFT JOIN для объединения таблиц и группы GROUP BY группировать столбцы с одинаковыми Custmer_ID, как показано здесь:

SELECT MIN([Table1].[Customer_ID]) 
    ,MIN([Table2].[ListID]) 
FROM [Table1] 
LEFT JOIN [Table2] 
ON [Table2].[Customer_ID] = [Table1].[Customer_ID] 
GROUP BY [Table1].[Customer_ID] 

Текущие результаты:

Customer_ID ListID 
------------------ 
1   1 
2   1 
3   NULL 

Я не могу понять, куда идти сюда, чтобы разобрать ListID годов на отдельные столбцы. Есть ли способ итерации через ListID?

+0

Пожалуйста, обратите внимание на функцию поворота http://stackoverflow.com/questions/14797691/dynamic-pivot-columns-in-sql-server – Hituptony

ответ

1

Это уникально тем, что столбец, который вы хотите поворачивать, не существует. Вы можете создать его с помощью функции окна Row_number. Это выглядит следующим образом:

SELECT Customer_ID, [1] ListID1, [2] ListID2, [3] ListID3 
FROM 
(select Table1.Customer_ID, 
    Table2.ListID, 
    ROW_NUMBER() over (Partition by Table1.Customer_ID Order By Table2.ListID) RowNum 
from Table1 
LEFT JOIN Table2 
ON Table2.[Customer_ID] = Table1.[Customer_ID]) as SourceTable 
PIVOT 
(
max(ListID) 
FOR RowNum IN ([1], [2], [3]) 
) AS PivotTable 

Это будет показывать только первые три ListID значения в столбцах. Если вам нужно больше, вы можете добавить больше RowNum.

+0

Это сработало, спасибо вам много! Я определенно пойду и буду исследовать больше на сводных таблицах. – user3669766

Смежные вопросы