Сравнить с датами и удостоверением личности?

Использование SQL Server 2000

Я хочу получить Table2.TimeIn Table2.TimeOut в соответствии с Table1.personid, а также Если Table1.Date = Table3.Date, тогда он должен принимать Table3.TimeIn, Table3.TimeOut.

3 таблицы

Таблица 1

ID    Date  

001 20090503 
001 20090504 
001 20090506 
002 20090505 
002 20090506 

So on…,

Таблица 2

ID    TimeIn TimeOut

001 08:00:00 18:00:00
002 08:00:00 21:00:00

So on…,

Таблица 3

ID    Date  TimeIn TimeOut

001 20090504 10:00:00 22:00:00
001 20090505 17:00:00 23:00:00
002 20090505 12:00:00 21:00:00 

So on…,

Select Table1.ID, 
       Table1.Date, 
       Table2.TimeIn, 
       Table2.TimeOut 
  from Table1 
Inner Join Table2 on Table1.ID = Table2.ID 

Если Table1.Date = Table3.Date, тогда он должен принимать Table3.TimeIn, Table3.TimeOut иначе Table2.TimeIn, Table2.Timeout

Ожидаемый результат

ID Date TimeIn TimeOut

001 20090503 08:00:00 18:00:00
001 20090504 10:00:00 22:00:00 
001 20090506 08:00:00 18:00:00
002 20090505 12:00:00 21:00:00
002 20090506 08:00:00 21:00:00

So on…,

Как написать запрос для этого условия?


person Gopal    schedule 06.10.2009    source источник


Ответы (1)


Резервный график рабочего времени сотрудника ?:

SELECT Table1.ID
    ,Table1.Date
    ,COALESCE(Table3.TimeIn, Table2.TimeIn) AS TimeIn
    ,COALESCE(Table3.TimeOut, Table2.TimeOut) AS TimeOut
FROM Table1
INNER JOIN Table2 -- Always have an expected schedule for an employee
    ON Table1.ID = Table2.ID
LEFT JOIN Table3 -- May.may not have an actual schedule for an employee
    ON Table3.ID = Table1.ID
    AND Table3.Date = Table1.Date
/*
ORDER BY Table1.ID
    ,Table1.Date
*/
person Cade Roux    schedule 06.10.2009
comment
слишком быстро для меня; собирался опубликовать то же самое :) - person Stuart Ainsworth; 06.10.2009