1

使用 SQL Server 2000

表格1

ID Salary (Monthly) perday (salary)

001 3000 100
002 1500 50
003 4500 150

Salary,perday列是数据类型float

表2

ID Date Latetime (HH:mm)

001 01/02/2012 00:15 
001 02/02/2012 00:10
001 03/02/2012 00:45 
001 04/02/2012 00:29
001 05/02/2012 01:00

002 11/03/2012 00:02 
002 12/03/2012 00:20
002 13/03/2012 00:29
002 14/03/2012 01:00


002 10/03/2012 01:30 
002 10/03/2012 02:00

我想根据迟到的计数扣除工资金额。

健康)状况

01 到 29 分钟延迟状态

  • 如果用户第一次迟到不扣除
  • 如果用户第二次迟到,每天扣除 10% 的工资
  • 如果用户第三次迟到,则每天扣除 25% 的工资
  • 如果用户第 4 次迟到或超过 50% 的每日工资扣除

迟到 30 分钟到 1 小时

  • 如果用户第一次迟到不扣除
  • 如果用户第二次迟到,将扣除 50% 的每日工资
  • 如果用户第三次迟到 100% 扣除每日工资
  • 如果用户第 4 次迟到及以上,则扣除 150% 的日薪

表 2 的预期输出

         4th onwards
ID Ist 2nd 3rd  days Amount Deducted 


001 0 10 50  2 250 310
002 0 10 10 1 100   120

输出说明

用户 001 迟到 5 次作为表 2 中的 Count(latetime)

  • 第一次迟到 00:15 分钟 - 不扣分
  • 第二次迟到 00:10 分钟,所以迟到时间在 01 到 29 之间,所以每天扣除 10% 的工资 第一次(01 到 29)
  • 第三次迟到 00:45 分钟,所以迟到时间在 30 到 01 小时之间,所以每天扣除 50% 的工资 第一次(30 到 01)
  • 第 4 次迟到 00:29 分钟,所以迟到时间在 01 到 29 之间,所以每天扣除 50% 的工资 第 2 次(01 到 29)
  • 第 5 次迟到 01:00 分钟,所以迟到在 30 到 01 小时之间,所以 150 % 的每日工资扣除第 1 次(30 到 01)

如何针对上述条件创建查询?

4

1 回答 1

3
--create and populate penalty rules
create table table4( latetype int null, nthtime int null, mulfactor float null)
insert into table4 values (1,1,0) insert into table4 values (1,2,0.1)
insert into table4 values (1,3,0.25) insert into table4 values (1,4,0.5)
insert into table4 values (2,1,0) insert into table4 values (2,2,0.5)
insert into table4 values (2,3,1.0) insert into table4 values (2,4,1.5)
--create third table to populate the nthtime and latetype for table2
select x.id, date,
      (select count(*) from table2 where id=x.id and date<=x.date) as nthtime, 
      case when x.latetime<'00:30' then 1 else 2 end as latetype
into table3
from table2 x join table1 on table1.id = x.id
--select the deduction amounth per id 
select table1.id, 
       sum(table1.perday* 
       isnull(mulfactor, case when latetype = 1 then .5 else 1.5 end) )as deduction
from table3 a 
left join table4 b on a.latetype=b.latetype and a.nthtime=b.nthtime 
join table1 on table3.id = table1.id
group by table1.id
于 2012-08-26T20:23:13.803 回答