IBM DB2 PIVOT A TABLE 全是日期

IBM DB2 PIVOT A TABLE FULL OF DATES

我在 DB2 中有这个 table:

   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

我想统计一个日期在table中出现了多少次,并按年月分组,显示如下:

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

您可以使用 link 中描述的通用例程。
使用以下调用为您的案例获取所需的结果集:

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

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

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