2009-10-28 29 views
0

使用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 

應該顯示從表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 

的理由。 ..,

所以它應該顯示一個原因,而不是在t2.fromdate和t2.todate之間放置table1.id = table2.id和t1.date。

如何修改我的查詢?

需要查詢幫助

+0

在表2中,如果ID爲第二個條目是002? – 2009-10-28 14:13:07

回答

3

自己的查詢是幾乎沒有,你只需要從Table2使用Reason列時,它可用:

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

將錯誤顯示爲「無法解決排序規則衝突」 – Gopal 2009-10-28 14:34:03

+0

嗯,聽起來像您需要來自原始查詢的「COLLATE」。我會編輯我的答案。 – LukeH 2009-10-28 14:35:56

+0

我已經在使用COLLATE DATABASE_DEFAULT,但它顯示爲相同的錯誤。 – Gopal 2009-10-28 14:47:18