2016-12-06 10 views
2

SQL Serverの行を列に変換する方法を探しています。私はそれを行う方法がわかりません。私は2年しか比較する必要はない。例えば、私は私は次のようなデータを取得するためにSQL Serverは2行から結果を取得します

Year Item  Qty 
------------------- 
2014 Shoes 500 
2014 Ties  300 
2014 Pants 200 
2015 Shoes 600 
2015 Ties  200 
2015 Buttons 100 

たいています

Item Year1 Qty1 Year2 Qty2 
------------------------------------ 
Shoes 2014 500  2015 600 
Ties 2014 300  2015 200 
Pants 2014 200  -  - 
Buttons -  -  2015 100 

クエリが結果を得るためにのようになりますどのように?

+0

'Pを使用しますIVOT'または動的SQL – Wanderer

+0

ここで質問する方法を書いてもいいですか? –

+0

合計を取得するために特別なクエリが必要な場合は、派生テーブルを使用して2014個の数量を取得し、別の派生テーブルを使用して2015個の数量を取得し、それらを一緒に結合することができます。 – SQLChao

答えて

0

あなたは以下のコード使用してこれを行うことができます。とにかく

DECLARE @DataSource TABLE 
(
    [Year] SMALLINT 
    ,[Item] VARCHAR(12) 
    ,[Qty] SMALLINT 
); 

INSERT INTO @DataSource ([Year], [Item], [Qty]) 
VALUES (2014, 'Shoes', 500) 
     ,(2014, 'Ties', 300) 
     ,(2014, 'Pants', 200) 
     ,(2015, 'Shoes', 600) 
     ,(2015, 'Ties', 200) 
     ,(2015, 'Buttons', 100); 


SELECT [Item] 
     ,IIF([2014] IS NOT NULL, 2014, NULL) AS [Year1] 
     ,[2014] AS [Qty1] 
     ,IIF([2015] IS NOT NULL, 2015, NULL) AS [Year2] 
     ,[2015] AS [Qt2] 
FROM @DataSource DS 
PIVOT 
(
    MAX([Qty]) FOR [Year] IN ([2014], [2015]) 
) PVT; 

enter image description here

を、あなただけの次のコードを使用して比較することができます簡単に思えるが、私はあなたの特定のニーズを認識していないです:

SELECT [Item] 
     ,[2014] 
     ,[2015] 
FROM @DataSource DS 
PIVOT 
(
    MAX([Qty]) FOR [Year] IN ([2014], [2015]) 
) PVT; 

enter image description here

関連する問題