Как отобразить значение для дат? - PullRequest
0 голосов
/ 28 октября 2009

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

Database1

Table1

ID Date Status

001 23-02-2009 Worked
001 24-02-2009
001 25-02-2009
001 26-02-2009 Worked
002 24-02-2009 Worked
002 25-02-2009
002 26-02-2009
002 27-02-2009
002 28-02-2009 Worked

...

database2

Table2

ID FromDate ToDate Reason

001 24-02-2009 25-02-2009 ShortLeave
002 25-02-2009 27-02-2009 MedicalLeave

...

Пробный запрос

SELECT DISTINCT t1.ID, 
t1.Date, 
CASE WHEN t2.ID IS NULL THEN t1.Status ELSE 'Leave' END AS Workedtime      
from Database1.dbo.table1 AS t1 LEFT OUTER JOIN Database2.dbo.table2 AS t2 
ON t1.ID COLLATE DATABASE_DEFAULT = t2.ID 
AND t1.Date BETWEEN t2.FromDATE AND t2.ToDATE

Он должен отображать причину из таблицы2 вместо выхода

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

ID Дата Статус

001 23-02-2009 Worked
001 24-02-2009 ShortLeave
001 25-02-2009 ShortLeave
001 26-02-2009 Worked
002 24-02-2009 Worked
002 25-02-2009 MedicalLeave
002 26-02-2009 MedicalLeave
002 27-02-2009 MedicalLeave
002 28-02-2009 Worked

...

Таким образом, он должен отображать причину вместо выхода, где table1.id = table2.id и t1.date между t2.fromdate и t2.todate.

Как изменить мой запрос?

Нужна помощь по запросу

1 Ответ

3 голосов
/ 28 октября 2009

Ваш собственный запрос уже почти готов, вам просто нужно использовать столбец Reason из Table2, когда он доступен:

SELECT t1.ID, t1.Date, ISNULL(t2.Reason, t1.Status) AS WorkedTime
FROM Table1 AS t1
    LEFT JOIN Table2 AS t2
        ON t1.ID COLLATE DATABASE_DEFAULT = t2.ID
            AND t1.Date BETWEEN t2.FromDate AND t2.ToDate
ORDER BY t1.ID, t1.Date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...