如何使用数据透视表进行分组。

3

有一个像这样的表:

name  ZK04_COUNT  ZK05_COUNT  ZK04_PRICE  ZK05_PRICE
A     15           0             150.00      0 
A     0            20              0         223.00
B     11           0             75.00       0
B     0            24              0         250.00

我试图将它转换为这样的格式:

name  ZK04_COUNT  ZK05_COUNT  ZK04_PRICE  ZK05_PRICE
A         15          20        150.00       223.00
B         11          24         75.00       250.00


我的代码如下:

这是我的代码:

SELECT *
FROM (
      SELECT 
       r.name
      ,r.AUART
      , CASE WHEN r.AUART = 'ZK05' THEN count(r.MATNR) ELSE '' END AS ZK05_COUNT
      , CASE WHEN r.AUART = 'ZK04' THEN count(r.MATNR) ELSE '' END AS ZK04_COUNT
      , CONVERT(money, sum(CAST(netpr as MONEY)), 1) as ToplamTutar  
      FROM GARANTI_YP_RAPORU as r
      group by r.name ,r.AUART
     ) as gTablo
PIVOT
(
  SUM(ToplamTutar)

  FOR gTablo.AUART IN ([ZK05],[ZK04])
)
AS p1


我希望输出在单行中显示。如何做到这一点?

@jarlh SQL Server 2014管理工具 - Mert
展示原始表格也会有助于您的问题。仅根据当前输出来确定可能存在的表格是困难的。 - Tim Biegeleisen
似乎透视不是一个好选择。通常情况下,当您想要将特定列的值转换为列时,才会使用PIVOT,而这并非本例。您可以像Luk回答的那样使用“GROUP BY”来完成所需的操作。 - EzLo
1个回答

5
这不真的需要一个PIVOT。
只需按名称分组,然后使用条件聚合即可。
SELECT r.name
, COUNT(CASE WHEN r.AUART = 'ZK04' THEN r.MATNR END) AS ZK04_COUNT
, COUNT(CASE WHEN r.AUART = 'ZK05' THEN r.MATNR END) AS ZK05_COUNT
, CAST(SUM(CASE WHEN r.AUART = 'ZK04' THEN r.netpr ELSE 0 END) AS MONEY) AS ZK04_PRICE
, CAST(SUM(CASE WHEN r.AUART = 'ZK05' THEN r.netpr ELSE 0 END) AS MONEY) AS ZK05_PRICE
FROM GARANTI_YP_RAPORU as r
GROUP BY r.name
ORDER BY r.name

救了我的一天!感谢你的帮助。 - Mert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接