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