2016-09-25 63 views
5

我在SQL中有2个表。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 statment为

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

问题是: 我该如何透视dbo.external然后在一个sql语句中加入dbo.main?

回答

5

只是JOINMainPivot源查询

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

非常感谢伴侣 – 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