【问题标题】:SQL Grouping and counting togetherSQL 一起分组和计数
【发布时间】:2016-04-18 18:03:48
【问题描述】:

我尝试将分组元素作为列,将计数作为行元素。

可能的状态 = IO、NIO、OPEN、CLOSED、CANCELLED
可能的类型 = TypeA、TypeB、typeC、typeD

MyTable (date, status, type, count)

2014-06-27,OPEN,typeA, 1
2014-07-01,OPEN,typeA, 1
2014-07-02,IO,typeB, 2
2014-07-02,IO,typeC, 3
2014-07-02,NIO,typeC, 4

结果应该是这样的。 (按日期和状态分组)

date,status,typeA_Count, typeB_Count, typeC_Count, typeD_Count

2014-06-27,OPEN,1, 0, 0, 0
2014-07-01,OPEN,1, 0, 0, 0
2014-07-02,IO, 0, 2, 3, 0
2014-07-02,NIO, 0, 0, 4, 0

【问题讨论】:

  • 您使用的是哪个数据库?
  • 你使用什么风格的 SQL?
  • @AllanS.Hansen 我使用 Db2 DB...
  • @LukeH 我使用 DB2 数据库
  • DB2 database?哪一个?也就是说,它有多旧或新? (什么版本?)它安装在什么平台上? (不同的平台有自己的特殊能力或限制。)

标签: sql db2 db2-9.7


【解决方案1】:

一种简单的方法是使用CASE/GROUP BY 将值相加;

SELECT "date", "status",
  SUM(CASE WHEN "type"='typeA' THEN "count" ELSE 0 END) typeA_count,
  SUM(CASE WHEN "type"='typeB' THEN "count" ELSE 0 END) typeB_count,
  SUM(CASE WHEN "type"='typeC' THEN "count" ELSE 0 END) typeC_count,
  SUM(CASE WHEN "type"='typeD' THEN "count" ELSE 0 END) typeD_count
FROM mytable
GROUP BY "date", "status"
ORDER BY "date", "status"

An Oracle SQLfiddle to test with,尽管 DB2 应该可以正常运行。

【讨论】:

    【解决方案2】:

    DB2 不支持 PIVOT 子句,因此试试这个:

    select date
         , status
         , sum(decode(type,'typeA',count,0)) as count_typeA
         , sum(decode(type,'typeB',count,0)) as count_typeB
         , sum(decode(type,'typeC',count,0)) as count_typeC
         , sum(decode(type,'typeD',count,0)) as count_typeD
      from mytable
     group by date, status
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 2021-04-11
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多