如何展平/转动sql结果集?

时间:2016-11-04 15:23:38

标签: sql-server tsql

我有一个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

注意:我可能需要帮助重新编写和重新编写此问题,以使其对社区更有用。谢谢你的帮助!

1 个答案:

答案 0 :(得分: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