2016-09-25 40 views
5

Mam 2 tabeli w SQL.SQL PIVOT: Jeden do wielu

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 

Co staram się osiągnąć to:

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

próbuję użyć pivot na dbo.external statment jak

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

Problem: Jak mogę przestawić dbo.external, a następnie dołączyć do dbo.main w jednym słowie sql?

Odpowiedz

5

Wystarczy JOIN na Main tabeli w kwerendzie źródłowej 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

dziękuję Mate – user3165474

4

Korzystanie WITH klauzuli:

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

to działa zbyt. :RE – user3165474