工资类型表:
编号 类型
1 基本工资
2 奖金
3 社会保险
4 其他扣款工资表
员工编号 工资类型 工资
张三 1 3000
张三 2 5000
张三 3 300
张三 4 100
李四 1 3500
李四 2 5000
李四 3 300
李四 4 100我要得到如下的效果:
张三 3000 5000 300 100
李四 3500 5000 300 100
不知道SELECT 语句该怎么写?望前辈们指教.
谢谢
编号 类型
1 基本工资
2 奖金
3 社会保险
4 其他扣款工资表
员工编号 工资类型 工资
张三 1 3000
张三 2 5000
张三 3 300
张三 4 100
李四 1 3500
李四 2 5000
李四 3 300
李四 4 100我要得到如下的效果:
张三 3000 5000 300 100
李四 3500 5000 300 100
不知道SELECT 语句该怎么写?望前辈们指教.
谢谢
2 sum(decode(id,2,gz,0)) "2",
3 sum(decode(id,3,gz,0)) "3",
4 sum(decode(id,4,gz,0)) "4"
5 from tmp_gz
6 group by nname;NNAME 1 2 3 4
---------- ---------- ---------- ---------- ----------
李四 3500 0 0 0
张三 3000 5000 300 100
----- ------- -----------
1.00 1 10.00
1.00 2 100.00
1.00 3 1,000.00
1.00 4 10,000.00
2.00 1 20.00
2.00 2 200.00
2.00 3 2,000.00
2.00 4 20,000.00select 员工编号, sum(decode(工资类型,1, 工资,null)) "1",
sum(decode(工资类型,2, 工资,null)) "2",
sum(decode(工资类型,3, 工资,null)) "3",
sum(decode(工资类型,4, 工资,null)) "4"
from tab
group by 员工编号ID 1 2 3 4
----- ------- ------- --------- -----------
1 10.00 100.00 1,000.00 10,000.00
2 20.00 200.00 2,000.00 20,000.00
就我所知,REPORT BUILDER支持交叉报表,可以实现该功能。如果类型表是不定的,想要行转列,必须使用存储过程或函数,想一条SQL解决
基本上不可能。
(select 员工编号,工资 as 基本工资 from where 工资类型='基本工资') a,
(select 员工编号,工资 as 奖金 from where 工资类型='奖金') b,
(select 员工编号,工资 as 社会保险 from where 工资类型='社会保险') c,
(select 员工编号,工资 as 其他扣款 from where 工资类型='其他扣款') d
where a.员工编号=b.员工编号 and
a.员工编号=c.员工编号 and
a.员工编号=d.员工编号;