Oracle 10g将一行中的值返回并创建月份列

时间:2014-10-02 16:23:51

标签: sql oracle

我们刚刚发现我们获得访问的新数据库是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;

感谢您的帮助,

1 个答案:

答案 0 :(得分:1)

我愿意:

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;