2016-09-25 3 views
5

У меня есть 2 таблицы в SQL.SQL PIVOT: один для многих

dbo.main

|id | mid | tid 
1 yes no 

dbo.external

| id | type | element | 
    1 c  9 
    1 d  10 
    1 h  11 
    1 g  12 

Что я пытаюсь достичь, это:

| id | mid | tid | c | d | h | g | 
    1 yes no 9 10 11 12 

я пытаюсь использовать стержень на dbo.external даного в

SELECT * 
FROM 
(
    SELECT id,type,element 
    FROM dbo.external 
) SRC 
PIVOT 
(
    MAX(FIELD_DATA) 
    FOR FIELD_NUMBER IN (id,type,element) 
) PIV; 

Проблема в следующем: Как я могу развернуть dbo.external, а затем присоединиться к dbo.main в одном заявлении sql?

ответ

5

Просто JOIN в Main таблице в Pivot исходном запросе

SELECT * 
FROM (SELECT e.id,mid,tid,[element],[type] 
     FROM dbo.[external] e 
       JOIN main m 
       ON e.id = m.id) a 
     PIVOT (Max([element]) 
      FOR [type] IN ([c],[d],[h],[g])) PIV 
+0

Большое спасибо Mate – user3165474

4

Использование WITH пункта:

WITH temp AS(
    -- here make the join 
) 
SELECT id,mid,tid, c,d,h,g 
FROM temp 
PIVOT 
(
    MAX(FIELD_DATA) 
    FOR type IN (c,d,h,g) 
) as PIV; 
+0

это тоже работает. : D – user3165474