Oracle SQL自动行到列数据透视

时间:2016-10-18 14:20:14

标签: sql oracle automation 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年4月1日)。

我需要编写一个返回的查询:

ID  |  Jan State  |  Feb State  |  Mar State  |  (Repeat for each month)
------------------------------------------------------------------------
1   |  A          |  B          |  A          |  ...
2   |  C          |  B          |  A          |  ...

由于每月都会添加新数据,因此我希望自动执行查询,以便在新一个月的数据发布时不必编辑它。

我正在尝试做什么?

1 个答案:

答案 0 :(得分:2)

请参阅对原始问题的评论 - 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