【问题标题】:Pivot With Grouping?分组透视?
【发布时间】:2016-02-23 20:49:06
【问题描述】:

我正在为 SSRS 报告构建查询,并且我有一个位置和数量的支点。我为每个位置获得两行,但是当我旋转时,我希望最终结果是一行。

SELECT * 
FROM ( SELECT DISTINCT  ItemNmbr ,
          ITEMDESC ,
          Location ,
          QtyOnhand ,
          QtyOnOrder ,
          QtyBackordered ,
          TotalInventory ,
          EXTDCOST ,
          InventoryValue 
          FROM #ssrsFinal
) AS p PIVOT
(SUM(QTYOnHand) FOR Location IN ( Loc1, Loc2, HUB, INLAND, Loc, [OLD Loc],[IN TRANSIT] )
) AS pvt;

我的结果是两行,我怎样才能把它变成一行?

我已尝试将数据透视结果插入临时表,然后进行分组,但它不会继承选择中的位置。

枢轴之前的结果。 3 个不同的位置。

【问题讨论】:

  • InventoryValue 列执行聚合函数,例如 SUM()。

标签: tsql pivot-table ssrs-2008-r2


【解决方案1】:

我想这就是你要找的东西:

你已经做了数据透视,你只需要相应地聚合数据透视表的结果。

假设:按ItemNmbr,ITEMDESC,EXTDCOST,Loc1,Loc2,HUB,INLAND,Loc,[OLD Loc],[IN TRANSIT]分组

SELECT    ItemNmbr ,
          ITEMDESC ,
          QtyOnOrder=SUM(QtyOnOrder) ,
          QtyBackordered=SUM(QtyBackordered) ,
          TotalInventory=SUM(TotalInventory) ,
          EXTDCOST,
          InventoryValue = SUM(InventoryValue) ,
          Loc1, 
          Loc2, 
          HUB, 
          INLAND, 
          Loc, 
          [OLD Loc],
          [IN TRANSIT]
FROM ( SELECT DISTINCT  ItemNmbr ,
          ITEMDESC ,
          Location ,
          QtyOnhand ,
          QtyOnOrder ,
          QtyBackordered ,
          TotalInventory ,
          EXTDCOST ,
          InventoryValue 
          FROM #ssrsFinal
) AS p PIVOT
(SUM(QTYOnHand) FOR Location IN ( Loc1, Loc2, HUB, INLAND, Loc, [OLD Loc],[IN TRANSIT] )
) AS pvt
GROUP BY  ItemNmbr ,
          ITEMDESC ,
          EXTDCOST,
          Loc1, 
          Loc2, 
          HUB, 
          INLAND, 
          Loc, 
          [OLD Loc],
          [IN TRANSIT] ; 

回应评论:

样本数据集:

CREATE TABLE #ssrsFinal (ItemNmbr VARCHAR(10),
          ITEMDESC VARCHAR(100),
          Location VARCHAR(10),
          QtyOnhand INT,
          QtyOnOrder INT,
          QtyBackordered INT,
          TotalInventory INT,
          EXTDCOST DECIMAL(20,5),
          InventoryValue  DECIMAL(20,2))

INSERT INTO #ssrsFinal
VALUES 
('94185BJGD','SS MESH ROAST PAN, 2X GRILL CLAWS, STAM HNDL, GD','Something',0,0,0,0,14.18000,0),
('94185BJGD','SS MESH ROAST PAN, 2X GRILL CLAWS, STAM HNDL, GD','Something',0,0,0,0,14.18000,0),
('94185BJGD','SS MESH ROAST PAN, 2X GRILL CLAWS, STAM HNDL, GD','Something',3,0,0,3,14.18000,42.54)

响应评论“...插入值而不是位置的“某物”尝试添加与示例不同的位置,然后再次运行您的查询,它将拉回两行。我尝试了 INLAND、HUB 和LOC。”:

SELECT    ItemNmbr ,
          ITEMDESC ,
          QtyOnOrder=SUM(QtyOnOrder) ,
          QtyBackordered=SUM(QtyBackordered) ,
          TotalInventory=SUM(TotalInventory) ,
          EXTDCOST,
          InventoryValue = SUM(InventoryValue) ,
          Loc1=SUM(Loc1), 
          Loc2=SUM(Loc2), 
          HUB=SUM(HUB), 
          INLAND=SUM(INLAND),
          Loc=SUM(Loc), 
          [OLD Loc]=SUM([OLD Loc]),
          [IN TRANSIT]=SUM([IN TRANSIT])
FROM ( SELECT DISTINCT  ItemNmbr ,
          ITEMDESC ,
          Location ,
          QtyOnhand ,
          QtyOnOrder ,
          QtyBackordered ,
          TotalInventory ,
          EXTDCOST ,
          InventoryValue 
          FROM #ssrsFinal
) AS p PIVOT
(SUM(QTYOnHand) FOR Location IN ( Loc1, Loc2, HUB, INLAND, Loc, [OLD Loc],[IN TRANSIT] )
) AS pvt
GROUP BY  ItemNmbr ,
          ITEMDESC ,
          EXTDCOST  ; 

结果:

【讨论】:

  • 不幸的是,这并没有做到。它像以前一样拉回两行。
  • @newGuy 你能否给我生成的数据集:SELECT DISTINCT ItemNmbr , ITEMDESC , Location , QtyOnhand , QtyOnOrder , QtyBackordered , TotalInventory , EXTDCOST , InventoryValue FROM #ssrsFinal
  • 将其添加到原始问题中。谢谢!
  • @newGuy 在产生两行的组列中,您的数据中一定有一些不同的东西。有关详细信息,请参阅我编辑的答案。
  • @newGuy 啊,这是有道理的,所以你没有按透视列分组。查看我编辑的答案以获得您正在寻找的结果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
  • 2019-07-09
相关资源
最近更新 更多