2009-10-06 4 views
0

Использование SQL Server 2000Сравнить с датами и идентификатором?

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

3 Таблицы

Table1

ID Date 

001 20090503 
001 20090504 
001 20090506 
002 20090505 
002 20090506 

Итак, на ...,

Table2

ID TimeIn TimeOut 

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

Итак, на ...,

Таблица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 

Итак, на ...,

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 

Итак, на ...,

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

ответ

3

Сотрудник график запасной вариант ?:

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 
*/ 
+0

слишком быстро для меня; собирался опубликовать то же самое :) –

Смежные вопросы