2016-11-04 51 views
1

我有一个SQL结果集如下所示:如何平铺/旋转sql结果集?

Sql Result Set

我怎样才能得到这样的结果对每个ItemCode显示只有一排?使用GROUP BY似乎不起作用,因为它需要我包含阻止我正在寻找的分组的列。

我写的查询是从一个表中为每个仓库提取一行数据,我试图用一种方式对它进行格式化,每个ItemCode只有一行。我认为什么是透视我试图做...

这里是我的查询看起来像目前术语:

SELECT 
    ItemCode, 
    ISNULL((SELECT Quantity WHERE WhsCode = 10), 0) 'Whs10QTY', 
    ISNULL((SELECT Quantity WHERE WhsCode = 20), 0) 'Whs20QTY', 
    ISNULL((SELECT SalesAmt WHERE WhsCode = 10), 0) 'Whs10SalesAmt', 
    ISNULL((SELECT SalesAmt WHERE WhsCode = 20), 0) 'Whs20SalesAmt', 
    ISNULL((SELECT GrssProfit WHERE WhsCode = 10), 0) 'Whs10GrssProfit', 
    ISNULL((SELECT GrssProfit WHERE WhsCode = 20), 0) 'Whs20GrssProfit' 
FROM 
    @Table t 

注:我可能需要帮助的措词和retitling这个问题,以使它对社区更有用。感谢任何帮助家伙!

回答

1

我认为你可以简化这个如此:

Select ItemCode 
     ,Whs10QTY  = sum(case when WhsCode = 10 then Quantity else 0 end) 
     ,Whs20QTY  = sum(case when WhsCode = 20 then Quantity else 0 end) 
     ,Whs10SalesAmt = sum(case when WhsCode = 10 then SalesAmt else 0 end) 
     ,Whs20SalesAmt = sum(case when WhsCode = 20 then SalesAmt else 0 end) 
     ,Whs10GrssProfit = sum(case when WhsCode = 10 then GrssProfit else 0 end) 
     ,Whs20GrssProfit = sum(case when WhsCode = 20 then GrssProfit else 0 end) 
From @Table t 
Group By ItemCode 
+0

谢谢主席先生!这工作。 – Dezryth

+0

@Dezryth乐于助人。 –