2013-09-04 15 views
16

SQL Server 2008を使用していますが、データをピボット解除しようとしています。ここで私が使用しているSQLコードは、SQL複数の列をピボット解除するデータ

CREATE TABLE #pvt1 (VendorID int, Sa int, Emp1 int,Sa1 int,Emp2 int) 
GO 
INSERT INTO #pvt1 VALUES (1,2,4,3,9); 

GO 

--Unpivot the table. 
SELECT distinct VendorID,Orders,Orders1 
FROM 
    (SELECT VendorID, Emp1, Sa,Emp2,Sa1 
    FROM #pvt1) p 
UNPIVOT 
    (Orders FOR Emp IN 
     (Emp1,Emp2) 
)AS unpvt 
UNPIVOT 
    (Orders1 FOR Emp1 IN 
     (Sa,Sa1) 
)AS unpvt1; 
GO 

そして、これは上記のコードの結果です。

VendorID Orders Orders1 
1   4  2 
1   4  3 
1   9  2 
1   9  3 

は、しかし、私は私の出力は、道が

VendorID Orders Orders1 
1   4  2 
1   9  3 

2が4に関連しているされて上記のコードから関係の下に表示することがしたい、と3は9

どのように関係しています私はこれを達成することはできますか?データをアンピボットする

+0

FWIWを見るのhttp:// mangalpardeshi .blogspot.com/2009/04/unpivot-multiple-columns.html – Seymour

答えて

29

簡単な方法は、ペアの列をアンピボットに適用さCROSSを使用することです:

select vendorid, orders, orders1 
from pvt1 
cross apply 
(
    select emp1, sa union all 
    select emp2, sa1 
) c (orders, orders1); 

SQL Fiddle with Demoを参照してください。あなたは、UNION ALLを使用したくない場合、またはCROSSは、VALUES句でAPPLY使用することができます。次のリンクは、私を助けた...

select vendorid, orders, orders1 
from pvt1 
cross apply 
(
    values 
    (emp1, sa), 
    (emp2, sa1) 
) c (orders, orders1); 

SQL Fiddle with Demo

+1

うわー...これは非常に便利ですが、私はそれを気にしませんでした。私はCROSS APPLYをスピードアップする必要があります。 –

関連する問題