关于SQL server 的一个算法

来源:百度知道 编辑:UC知道 时间:2024/06/05 15:18:33
有两个表,
工资表 gongzi
select emp_code,fenqi,gz form gongzi.存储所有员工工资信息。

emp_code fenqi gz
001 200905 2500
001 200906 2600
001 200907 2600
002 200905 2000
002 200906 2100
002 200907 2300

empcode = 员工工号 主键
fenqi = 每月分期 主键
gz = 每月总工资

奖金表
select emp_code ,date,money,rem form jiangjin

emp_code date money rem
001 2009-05-08 200 五一奖金
001 2009-05-31 400 奖金
001 2009-06-15 100 奖金
001 2009-06-19 150 奖金
001 2009-06-30 100 奖金
002 2009-05-08 300 五一奖金
002 2009-05-31 500 奖金
002 2009-06-15 200 奖金
002 2009-06-19 250 奖金
002 2009-06-30 300 奖金

emp_code = 员工工号,与工资表关联。。
date = 记录奖金调整的日期,也必须与工资表的分期关联。如2009-05-08,2009-05-31 应对应工资表的200905 分期
money = 奖金,以最后一次调整后的为准,月末计入总工资。
rem = 备注,记录调整奖金的原因。 <

select g.emp_code,fenqi,gz,date,money,rem from gongzi g,
(select * from jiangjin a
where date in (select max(date) from jiangjin where emp_code=a.emp_code group by left(convert(varchar(10),[date],120),7))) j
where g.emp_code=j.emp_code
and (DATENAME ( yy , date )+DATENAME ( mm , date )) = g.fenqi
and g.fenqi='200905'
and g.emp_code in ('001','002')

--结果
emp_code fenqi gz date money rem
-------- ---------- --------------------- ------------------------------------------------------ --------------------- ----------
001 200905 2500.0000 2009-05-31 00:00:00.000 400.0000 奖金
002 200905 2000.0000 2009-05-31 00:00:00.000 500.0000 奖金

(所影响的行数为 2 行)

你的工资表就有问题
既然是