求从A,B表计算出工资的SQL语句
tab_a
组别 工号 姓名 日期 正常 加班时间 选项
a_group a_id a_name a_date a_nortime a_outime a_ch
001 A001 张三 2005-10-01 8.00 2.00 1
001 A001 张三 2005-10-02 8.00 1.50 1
001 A001 张三 2005-10-03 8.00 3.50 2
... ... .. .... .. .. ..
001 A002 李四 2005-10-01 7.00 1.50 1
001 A002 李四 2005-10-02 8.00 3.50 3
... ... .. ..... .. .. ..
tab_b
正常 1.5倍 2倍 3倍
b_nor b_one b_tow b_three
3.00 4.50 6.00 9.00
计算出每个工号每个月正常时间,加班时间(按选项计),及上班工资及加班工资
如:
组别 工号 月上班工时 工资 月加班工时(1) 工资 月加班工时(2) 工资 月加班工时(3) 工资 总工资
001 A001 24.00 72.00 3.5 15.75 3.50 21.00 0.0 0.0 108.75
001 A002 15.00 45.00 1.5 6.75 0.00 0.00 3.5 31.5 83.25
.. ... .. .. ..
问题点数:50、回复次数:5Top
1 楼wangtiecheng(不知不为过,不学就是错!)回复于 2005-12-20 10:26:13 得分 50
select a_group as 组别,a_id as 工号,sum(a_nortime) as 月上班工时,
sum(a_nortime) * (select b_nor from tab_b) as 工资,
sum(case when a_ch=1 then a_outime else 0 end) as [月加班工时(1)],
sum(case when a_ch=1 then a_outime else 0 end) * (select b_one from tab_b) as 工资,
sum(case when a_ch=2 then a_outime else 0 end) as [月加班工时(2)],
sum(case when a_ch=2 then a_outime else 0 end) * (select b_tow from tab_b) as 工资,
sum(case when a_ch=3 then a_outime else 0 end) as [月加班工时(3)],
sum(case when a_ch=3 then a_outime else 0 end) * (select b_three from tab_b) as 工资,
isnull(sum(a_nortime) * (select b_nor from tab_b),0) +
isnull(sum(case when a_ch=1 then a_outime else 0 end) * (select b_one from tab_b),0) +
isnull(sum(case when a_ch=2 then a_outime else 0 end) * (select b_tow from tab_b),0) +
isnull(sum(case when a_ch=3 then a_outime else 0 end) * (select b_three from tab_b),0) as 总工资
from tab_a
group by a_group,a_id,month(a_date)Top
2 楼wangtiecheng(不知不为过,不学就是错!)回复于 2005-12-20 10:29:38 得分 0
tab_b表设计成这样才更容易处理
类型 系数
type num
0 3.00
1 4.50
2 6.00
3 9.00Top
3 楼weifai88(weifai88)回复于 2005-12-20 10:31:02 得分 0
哦,谢谢了Top
4 楼lsqkeke(可可)回复于 2005-12-20 10:31:19 得分 0
哦,你表tab_a中的字段a_ch 其值是与表tab_b中的倍数是对应关系哈!
计算方法好清楚,尝试写一下
Top
5 楼lsqkeke(可可)回复于 2005-12-20 10:34:45 得分 0
支持wangtiecheng(cappuccino)
呵呵 刚看完出来 他就写出来了 :)Top




