2009-05-13 5 views
1

背景:私は支払いが請求されている範囲内にある場合に限り休暇が支払われる給与計算システムを使用しています。したがって、インボイスが過去2週間をカバーしていれば、最後の2週間だけ休暇が支払われます。TSQL - 休暇日が請求書の範囲内にあるデータを選択する最良の方法

私は休暇を選択するSQLクエリを書きたいと思います。

DailyLeaveLedgerという表があり、とりわけLeaveDatePaidフラグがあるとします。 WeekEndingフィールドとNumberWeeksCoveredフィールドであるInvoiceというテーブルを想定します。

今週の週末は15/05/09、NumberWeeksCovered = 2、LeaveDateは11/05/09とします。

これはどのように書かれたかの例です。実際のクエリはかなり複雑ですが、私はLeaveDateのチェックをInサブクエリにします。

SELECT * 
FROM DailyLeaveLedger 
WHERE Paid = 0 AND 
     LeaveDate IN (SELECT etc...What should this be to do this) 

可能性があるかどうかわかりませんか?

マルコム

答えて

3

のでLeaveDateは、いくつかの請求書のために(WeekEnding-NoOfWeeksCovered)及び(WeekEnding)の間にすべきですか?

私は右のそれを理解している場合は、EXISTS()サブクエリ、このようなものを使用することができるかもしれません:私は、おかげでそれをテストします必要なものに見える

SELECT * 
FROM DailyLeaveLedger dl 
WHERE Paid = 0 AND 
     EXISTS (SELECT * 
       FROM Invoice i 
       WHERE DateAdd(week,-i.NumberOfWeeksCovered,i.WeekEnding) < dl.LeaveDate 
       AND i.WeekEnding > dl.LeaveDate 
       /* and an extra clause in here to make sure 
       the invoice is for the same person as the dailyleaveledger row */ 
      ) 
+0

を。 – Malcolm

+0

これを見ている人は、包括的または排他的なエンドポイントについて注意する必要があります。>>または<=は、 – ErikE

関連する問題