表t1:
mon(月份)   dep(部门)   ach(业绩)
---------------------------------------
一月份          01             10 
一月份          02             10 
一月份          03             5 
二月份          02             8 
二月份          04             9 
三月份          03             8 
表t2:
dep      dname 
-------------------------------------------
01       部门一 
02       部门二 
03       部门三
04       部门四要求从t1、t2中查询出如下面t3所示格式的数据,不用建t3表,查出结果就行
t3 (result) 
部门     一月份      二月份      三月份 
------------------------------------------- 
 01          10            null           null 
 02          10             8              null 
 03          null           5                8 
 04          null          null             9 

解决方案 »

  1.   

    建议直接百度ORACLE 行转列
      

  2.   

    ---行列转换
    SELECT t1.dept 部门,
     sum(CASE WHEN t1.mon='一月份' THEN t1.ach
       ELSE NULL END ) 一月份,
     sum(CASE WHEN t1.mon='二月份' THEN t1.ach
       ELSE NULL END ) 二月份,     
      sum(CASE WHEN t1.mon='三月份' THEN t1.ach
       ELSE NULL END ) 三月份
    FROM t1
    GROUP BY t1.dept
    ORDER BY t1.dept
    结果和楼主要的有所偏差
      

  3.   

    select * from t1 pivot (sum(ach) for mon in ('一月份','二月份','三月份'))
      

  4.   


    受教了,这样也能转换!去查查pivot怎么用。
      

  5.   


    受教了,这样也能转换!去查查pivot怎么用。
    手打的,不知道能编译通过么。。pivot行列转换 很好用的,11g新特性
      

  6.   

    --创建t1表并插入数据
    create table t1
    (
    mon varchar2(10),
    dept varchar2(10),
    ach integer
    )
    insert into t1
    select '一月份','01',10 from dual union all
    select '一月份','02',10 from dual union all
    select '二月份','03',5 from dual union all
    select '二月份','02',8 from dual union all
    select '三月份','03',8 from dual union all
    select '三月份','04',9 from dual
    --创建t2表并插入数据
    create table t2
    (
    dept varchar2(10),
    dname varchar2(10)
    )
    insert into t2
    select '01','部门一' from dual union all
    select '02','部门二' from dual union all
    select '03','部门三' from dual union all
    select '04','部门四' from dual
    --方法一
    select t1.dept,
    max(case when mon='一月份' then ach else null end)一月份,
    max(case when mon='二月份' then ach else null end)二月份,
    max(case when mon='三月份' then ach else null end)三月份
    from t1,t2
    where t1.dept=t2.dept group by t1.dept order by dept
    --方法二
    select * from t1 pivot(max(ach) for mon in(一月份,二月份,三月份)) a