0

以下のコードが控除表から金額を合計せず、出勤表の金額合計から差し引いて正味給与を取得しない理由を誰か教えてください。合計して控除する代わりに、控除を適用する前に出席テーブルの金額の合計を 2 倍にします。

select sum(attendance.amount) - max(deduction.amount) 
from attendance 
join deduction on attendance.staffid = deduction.staffid 
where attendance.staffid = some_staffid 
    and month(attendance.date) = some_month
    and month(deduction.date_approved) = some_month
4

1 に答える 1

0

ただの大げさな推測-出席ごとに2つの控除レコードがあります=>結合は出席テーブルからの金額を複製します=>合計はこれらの複製されたレコードを合計します

簡単な解決策(しかし、私はあまりうまく機能していません)は次のようになります:

select sum(a) - max_d
from (
  select attendance.amount a, deduction.amount d, max(deduction.amount) max_d
  from attendance 
  join deduction on attendance.staffid = deduction.staffid 
  where attendance.staffid = some_staffid 
      and month(attendance.date) = some_month
      and month(deduction.date_approved) = some_month
)
where d = max_d
于 2012-05-13T11:07:41.870 に答える