【问题标题】:IBM DB2 PIVOT A TABLE FULL OF DATESIBM DB2 PIVOT 一个完整的日期表
【发布时间】:2021-12-24 19:18:19
【问题描述】:

我在 DB2 中有这张表:

   DATE
----------
09/11/2021
06/10/2021
28/11/2021
17/11/2021
11/10/2021
24/11/2021
07/11/2021
30/11/2021

我想统计一个日期在表格中出现的次数,并按年和月分组,显示如下:

| YEAR | OCTOBER | NOVEMBER |
----------------------------
| 2021 |    2    |    6     |

【问题讨论】:

    标签: database date db2 db2-400 db2-luw


    【解决方案1】:

    由于月份是一个已知数量,您可以使用案例语句的总和:

    select year(datecol) as year
      ,sum(case when month(datecol) = 1 then 1 else 0 end) as jan
      ,sum(case when month(datecol) = 2 then 1 else 0 end) as feb
      ,sum(case when month(datecol) = 3 then 1 else 0 end) as mar
      ,sum(case when month(datecol) = 4 then 1 else 0 end) as apr
      ,sum(case when month(datecol) = 5 then 1 else 0 end) as may
      ,sum(case when month(datecol) = 6 then 1 else 0 end) as jun
      ,sum(case when month(datecol) = 7 then 1 else 0 end) as jul
      ,sum(case when month(datecol) = 8 then 1 else 0 end) as aug
      ,sum(case when month(datecol) = 9 then 1 else 0 end) as sep
      ,sum(case when month(datecol) = 10 then 1 else 0 end) as oct
      ,sum(case when month(datecol) = 11 then 1 else 0 end) as nov
      ,sum(case when month(datecol) = 12 then 1 else 0 end) as dec
     from datetest 
     group by year(datecol)
     order by 1;
    

    这会给你类似这样的输出:

    YEAR        JAN         FEB         MAR         APR         MAY         JUN         JUL         AUG         SEP         OCT         NOV         DEC
    ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
           2018           0           0           0           0           0           0           0           0           0           0           3           0
           2019           0           0           0           0           0           0           0           0           0           1           2           0
           2020           0           0           0           0           0           0           0           0           0           1           1           0
           2021           0           0           0           0           0           0           0           0           0           2           6           0
    

    【讨论】:

    • 这很完美!非常感谢!
    【解决方案2】:

    您可以使用链接dynamic pivot SQL Query in Db2 中描述的通用例程。
    使用以下调用为您的案例获取所需的结果集:

    CALL PIVOT
    (
      'SELECT YEAR (DATE) AS YEAR, TO_CHAR (DATE, ''MONTH'') AS MONTH FROM DATES'  
    , 'YEAR'
    , 'MONTH'
    , 'MONTH'
    , 'count'
    , 'SESSION.PIVOT'
    , '-'
    , ?, ?, ?
    );
    

    结果是:

    YEAR NOVEMBER OCTOBER
    2021 6 2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多