2016-12-06 108 views
2

我正在寻找一种方法将行转换为SQL Server中的列。我不知道该怎么做。我只需要比较两年。比如我有SQL Server从两行中获取结果

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

无论如何,你可以只使用下面的代码和比较IS似乎更容易,但我不知道您的具体需求:

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

enter image description here