如何显示日期的值?

时间:2009-10-28 14:06:51

标签: sql-server

使用SQL Server 2005

数据库1

表1

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

表2

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

它应该从table2显示Reason而不是Leave

预期产出

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

...

所以它应该在t2.fromdate和t2.todate之间显示一个原因而不是离开table1.id = table2.id和t1.date。

如何修改我的查询?

需要查询帮助

1 个答案:

答案 0 :(得分:3)

您自己的查询几乎就在那里,您只需使用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