22

SQL Server 2008 を使用しており、データのピボットを解除しようとしています。これが私が使用している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 に関連しています。

どうすればこれを達成できますか?

4

3 に答える 3

42

データのピボットを解除する簡単な方法は、CROSS APPLY を使用して列のペアをアンピボットすることです。

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 を使用したくない場合は、VALUES 句で CROSS APPLY を使用できます。

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

デモで SQL Fiddle を参照してください

于 2013-09-04T15:03:18.410 に答える