Oracle 10g取消透视返回一列中的值并创建月份列



我们刚刚发现,我们被授予访问权限的新数据库是Oracle 10g,因此我们无法像UNPIVOT那样使用fcn。

我们有一张这样的桌子。。

SUBMISSION  COUNTRY CPM_ID  PFM_ID  T_AREA  CNTRY_CODE  V_TYPE  RES_CAT  JAN_2014  FEB_2014
01-JUN-2014  USA     10      24      TEST1   USA         V1      210      5          10
01-AUG-2014   UK      20     30      TEST2   UK          V1      213     20          30

所需的输出如下。。。

SUBMISSION  COUNTRY  CPM_ID  PFM_ID  T_AREA  CNTRY_CODE  V_TYPE  RES_CAT  MONTH       VALUE
 01-JUN-2014  USA     10      24      TEST1   USA         V1      210     01-JAN-2014 5   
 01-JUN-2014  USA     10      24      TEST1   USA         V1      210     01-FEB-2014 10    
 01-AUG-2014   UK      20     30      TEST2   UK          V1      213     01-JAN-2014  20
 01-AUG-2014   UK      20     30      TEST2   UK          V1      213     01-FEB-2014  30

我正在处理这样的查询。。。但我无法让月份专栏正确地发表。。。

select *
from (select t.submission,
t.country,
t.cpm_id,
t.pfm_id,
t.t_area,
t.cntry_code,
t.v_type,
t.res_cat,
  (case 
    when n.n = 1 then JAN-2014 
    when n.n = 1 then FEB-2014 end) as value
    from table1 t cross join
       (select FEB_2014 as n from dual union all
        select FEB_2014 from dual) n
     ) s
where value is not null;

感谢您的帮助,

我会这么做:

select t.submission,
      t.country,
      t.cpm_id,
      t.pfm_id,
      t.t_area,
      t.cntry_code,
      t.v_type,
      t.res_cat,
      n.d,
      case when n.d = '01-JAN-2014' then t.jan_2014 else t.feb_2014 end value
from table1 t
cross join
(
  select '01-JAN-2014' d from dual
  union all
  select '01-FEB-2014' d from dual
) n;

最新更新