Oracle SQL 自动行到列透视
Oracle SQL Automated Rows to Column Pivot
这很简单,我保证我想多了。我有一个包含每月数据的输入数据集,如下所示:
MTD | ID | State
-----------------------
Jan-16 | 1 | A
Feb-16 | 1 | B
Mar-16 | 1 | A
Jan-16 | 2 | C
Feb-16 | 2 | B
Mar-16 | 2 | A
MTD 是一个日期字段,每个月都由该月的第一天表示(例如:2016 年 4 月 = 01-Apr-16)。
我需要编写一个查询 returns:
ID | Jan State | Feb State | Mar State | (Repeat for each month)
------------------------------------------------------------------------
1 | A | B | A | ...
2 | C | B | A | ...
因为每个月都会添加新数据,所以我想自动执行查询,这样当新的一个月的数据出现时我就不必编辑它了。
我想做的事情可行吗?
查看对原始问题的评论 - OP 表示他会对 MTD 列中一组已知值的解决方案感到满意。
演示(假设 MTD 列中的值事先已知):
with
inputs ( mtd, id, state ) as (
select 'Jan-16', 1, 'A' from dual union all
select 'Feb-16', 1, 'B' from dual union all
select 'Mar-16', 1, 'A' from dual union all
select 'Jan-16', 2, 'C' from dual union all
select 'Feb-16', 2, 'B' from dual union all
select 'Mar-16', 2, 'A' from dual
)
select *
from inputs
pivot (max(state) for mtd in ('Jan-16' as jan_state, 'Feb-16' as feb_state,
'Mar-16' as mar_state))
;
输出:
ID JAN_STATE FEB_STATE MAR_STATE
--- -------- --------- ---------
1 A B A
2 C B A
这很简单,我保证我想多了。我有一个包含每月数据的输入数据集,如下所示:
MTD | ID | State
-----------------------
Jan-16 | 1 | A
Feb-16 | 1 | B
Mar-16 | 1 | A
Jan-16 | 2 | C
Feb-16 | 2 | B
Mar-16 | 2 | A
MTD 是一个日期字段,每个月都由该月的第一天表示(例如:2016 年 4 月 = 01-Apr-16)。
我需要编写一个查询 returns:
ID | Jan State | Feb State | Mar State | (Repeat for each month)
------------------------------------------------------------------------
1 | A | B | A | ...
2 | C | B | A | ...
因为每个月都会添加新数据,所以我想自动执行查询,这样当新的一个月的数据出现时我就不必编辑它了。
我想做的事情可行吗?
查看对原始问题的评论 - OP 表示他会对 MTD 列中一组已知值的解决方案感到满意。
演示(假设 MTD 列中的值事先已知):
with
inputs ( mtd, id, state ) as (
select 'Jan-16', 1, 'A' from dual union all
select 'Feb-16', 1, 'B' from dual union all
select 'Mar-16', 1, 'A' from dual union all
select 'Jan-16', 2, 'C' from dual union all
select 'Feb-16', 2, 'B' from dual union all
select 'Mar-16', 2, 'A' from dual
)
select *
from inputs
pivot (max(state) for mtd in ('Jan-16' as jan_state, 'Feb-16' as feb_state,
'Mar-16' as mar_state))
;
输出:
ID JAN_STATE FEB_STATE MAR_STATE
--- -------- --------- ---------
1 A B A
2 C B A