我有一个名为:ListOfdates的表
TYPE | O_DATE | C_DATE |
+------+-------------+---------------+
A 15-JAN-2017 (NULL)
A 15-JAN-2017 (NULL)
A 15-JAN-2017 25-APR-2017
A 15-JAN-2017 (NULL)
A 24-FEB-2017 (NULL)
A 15-MAY-2017 (NULL)
B 15-MAY-2017 25-MAY-2017
C 15-MAY-2017 (NULL)
D 15-MAY-2017 26-MAY-2017
A 15-MAY-2017 (NULL)`
我想把它安排到下面,
`MONTH | Type A |Total| Type B |Total| Type C |Total| Type D |Total|
| A_o | A_c | T_o | B_o | B_c | T_o | C_o | C_c | T_o | D_o | D_c | T_o |
JAN | 4 | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
FEB | 1 | 0 | 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
MAR | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
APR | 0 | 1 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
MAY | 2 | 0 | 6 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 |
JUN | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
...`
条件是,
o_date将添加一个计数以打开月份并输入。
如果c_date不为null,它将为该月的关闭添加一个计数并输入
否则如果c_date为null,则不会计算结束。
此外,从年初开始累计的每种类型的开放数量总计。
必须显示所有12个月。
首字母缩略词是:
`O_DATE = open date
C_DATE = close date
A_o = Type A open
A_c = Type A close
B_o = Type A open
B_c = Type B close
C_o = Type C open
T_o = Total open for the type (example may have 2 type A that is open)
etc...`
有没有办法在带有数据透视的sql中执行此操作?
答案 0 :(得分:0)
我会使用条件聚合来做到这一点,但首先你必须取消数据的转换:
select to_char(dte, 'MON'),
sum(case when type = 'A' then open else 0 end) as A_o,
sum(case when type = 'A' then close else 0 end) as A_c,
sum(case when type = 'A' then 1 else 0 end) as A_total,
. . .
from ((select type, o_date as dte, 1 as open, 0 as close from t) union al
(select type, c_date as dte, 0 as open, 1 as close from t)
) oc
group by to_char(dte, 'MON')
order by min(dte);