TSQL - лучший способ выбрать данные, когда дата отпуска попадает в диапазон счета - PullRequest
1 голос
/ 13 мая 2009

Предыстория: у меня есть система начисления заработной платы, где отпуск оплачивается только в том случае, если он попадает в диапазон оплачиваемого счета. Таким образом, если счет покрывает последние 2 недели, оплачивается только отпуск за последние 2 недели.

Я хочу написать SQL-запрос, чтобы выбрать отпуск.

Предположим, таблица с именем DailyLeaveLedger имеет, среди прочего, флаг LeaveDate и Paid. Предположим, что таблица с именем Invoice была полем WeekEnding и полем NumberWeeksCovered.

Теперь предположим, что дата окончания недели 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)

Не уверен, если это возможно, как я упоминал?

Malcolm

1 Ответ

3 голосов
/ 13 мая 2009

Таким образом, 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 */
              )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...