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

标签 sql sql-server case pivot-table sql-server-2014

有一个这样的表:,

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

我希望单行输出。怎么做到的?

最佳答案

这真的不需要 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

关于sql - 如何使用数据透视表进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57520660/

相关文章:

MySQL : WHERE IN and OR are not returning the same rows

sql - psql:案例用法

c++ - QSqlQuery.record() 总是空的

SQL Server FOR XML : Joining XML nodes into one XML

SQL 仅选择缺失和更新的行

mysql - 连接两个表并使组和总和正确

SQL 使用字符串函数提高索引列性能

php - SQL 查询分组不正确

performance - 在这个 Common Lisp 函数中消除 "mystery-consing"?

SQL查询仅从多行中选择一行