浏览 8898 次
锁定老帖子 主题:请教关于员工工资统计查询的SQL语句
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-10-17
eid name ---------------- a01 张三 a02 李四 工资表 t_salary sid eid type amount ----------------------------------- 101 a01 基本工资 5500 102 a01 绩效工资 2000 103 a01 奖 金 1500 104 a02 基本工资 6500 105 a02 绩效工资 2200 106 a02 奖 金 1300 我现在要的查询结果是: 姓名 基本工资 绩效工资 奖 金 合 计 --------------------------------------------------------- 张三 5500 2000 1500 9000 李四 6500 2200 1300 10000 注意:type不是固定的,也许是3项,也许更多.这样的查询语句应该怎样写? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-10-17
可以查询出多个记录集,进行join。
也可以使用临时表。 或者用下面的sql: select t_employee.name, 基本工资=sum(case type when '基本工资' then amount else 0 end), 绩效工资=sum(case type when '绩效工资' then amount else 0 end), 奖 金=sum(case type when '奖 金' then amount else 0 end), 合 计=sum(amount) from t_employee,t_salary where t_employee.id=t_salary.eid group by t_employee.name |
|
返回顶楼 | |
发表时间:2006-10-17
谢谢together!
如果我的工资表t_salary的type改成salary_time(发放日期),一年有12个月,还这样写是不是太累了?有更优秀的写法吗? |
|
返回顶楼 | |
发表时间:2006-10-17
oracle:
SELECT a.NAME, sum(DECODE (b.TYPE, '基本工资', b.amount)) AS 基本工资, sum(DECODE (b.TYPE, '绩效工资', b.amount)) AS 绩效工资, sum(DECODE (b.TYPE, '奖金', b.amount)) AS 奖金,sum(b.amount) as 合计 FROM t_employee a, t_salary b WHERE a.eid = b.eid group by a.name |
|
返回顶楼 | |
发表时间:2006-10-17
用动态sql可以满足你
|
|
返回顶楼 | |
发表时间:2006-10-17
看上去像交叉报表.看看琴棋报表吧
|
|
返回顶楼 | |
发表时间:2007-01-31
“如果我的工资表t_salary的type改成salary_time(发放日期),一年有12个月,还这样写是不是太累了?有更优秀的写法吗?”确实呀,我也在寻找更好的办法,没有找到。
我一同事类似“type”的有几十种呀,手工写那么多真是痛苦,不过这样能解决问题,也就罢了。不过这样的查询,如果数据比较多的话,效率是个问题,不知道有没有更好的方案。 |
|
返回顶楼 | |