1

SQLServer2000の使用

表1

ID Salary (Monthly) perday (salary)

001 3000 100
002 1500 50
003 4500 150

Salaryperday列はデータ型です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分遅い状態

  • ユーザーが初めて遅れた場合、控除はありません
  • ユーザーが2回目に遅れた場合、日給の10%控除
  • ユーザーが3回目に遅れた場合、日給の25%の控除
  • ユーザーが4回目に遅れ、日給の50%を超える場合

30分から1時間遅れた状態

  • ユーザーが初めて遅れた場合、控除はありません
  • ユーザーが2回目に遅れた場合、日給の50%控除
  • ユーザーが3回目に遅れた場合、日給の100%控除
  • ユーザーが4回目に遅れ、日給の150%を超える場合

table2の期待される出力

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


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

説明を出力

テーブル2からのカウント(latetime)としてユーザー001が5回遅れる

  • 1回目は00:15分遅れます-控除なし
  • 2回目は00:10分遅れるので、01から29の間の遅い時間なので、1日あたりの給与控除の10% '1回目(01から29)
  • 3回目は00:45分遅れるので、30〜01時間遅れるので、1日あたりの給与控除額の50% '1回目(30〜01)
  • 4回目は00:29分遅れ、01から29の間の遅い時間なので、1日あたりの給与控除の50% '2回目(01から29)
  • 5回目は01:00分遅れ、30〜01時間遅れ、1日あたりの給与控除額の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 に答える