表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
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
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
结果和楼主要的有所偏差
受教了,这样也能转换!去查查pivot怎么用。
受教了,这样也能转换!去查查pivot怎么用。
手打的,不知道能编译通过么。。pivot行列转换 很好用的,11g新特性
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