2009-10-13 79 views
0

使用SQL Server 2005如何計算天數?

表1

ID FromDate ToDate 

001 23-02-2009 25-02-2009 
001 27-02-2009 29-02-2009 
002 12-02-2009, 25-03-2009 

...,

表2

ID Name Total 

001 Raja 30 
002 Ravi 22 

我想一日總量爲PERSONID

嘗試查詢,

SELECT 
    table2.Id, table2.name, table2.total, 
    datediff(day, table1.fromdate, table2.todate) 
FROM table1 
LEFT OUTER JOIN table2 ON table1.personid = table2.personid 

獲取輸出

ID Name Total Days 

001 Raja 30 3 
001 Raja 30 3 
..., 

應該總天數和它應該在一行內顯示,

注:假如我選擇特定時期日期意味着它應該顯示,只有天

例如

其中26-02-2009之間日期03-03-2009,它應該顯示

ID Name Total Days 

001 Raja 30 3 
..., 

由於正在採取日期25-02-2009後,

Expected Output 

ID Name Total Days 

001 Raja 30 6 
002 Ravi 22 16 

如何修改我的查詢?

+2

順便說一句,在數據轉儲您爲表1 ,29-02-2009不是有效日期。 2009年不是閏年,SQL Server會大聲喊叫。 – 2009-10-13 15:12:46

回答

0

DATEDIFF給出了天差的兩個日期之間的數,所以在相同的方式1和3之間的不同是2(3 - 1 = 2),DATEDIFF(d)實際上是D2-D1。因此,爲了補償要算上額外的一天,你需要DATEADD一天或者(TODATE或FROM日期),以抵消你日期:

SELECT table2.id, table2.Name, table2.Total, SUM(DATEDIFF(d, DATEADD(d, -1, table1.FromDate), table1.ToDate)) 
    FROM table1 
     INNER JOIN table2 ON table1.id = table2.id 
    GROUP BY table2.id, table2.Name, table2.Total 
0
SELECT table2.Id, table2.name, table2.total, 
     COALESCE(
     (
     SELECT SUM(DATEDIFF(day, table1.fromdate, table1.todate) + 1) 
     FROM table1 
     WHERE table1.personid = table2.personid 
     ), 0) AS [days] 
FROM table2 
+0

不,我正在使用DATEDIFF(day,table1.fromdate,table1.todate),所以假設從date = 24-02-2009和todate = 28-02-2009意味着它應該給總共5天,但現在它給3只有天。這是避免24和28。如何得到這個數字也。 – Gopal 2009-10-13 14:47:16

+0

查看帖子更新。如果您的日期是「24-02-2009」和「28-02-2009」,則「DATEDIFF」會爲您提供4天而不是「3」。 – Quassnoi 2009-10-13 14:54:08

0

我覺得一個GROUP BY查詢會更簡單:

SELECT table2.Id, table2.name, table2.total, 
SUM(DATEDIFF(day, table1.fromdate, table1.todate)) AS Days 
FROM table1 
left outer join table2 on 
table1.personid = table2.personid 
GROUP BY table2.Id, table2.name, table2.total 
+0

不,我使用DATEDIFF(day,table1.fromdate,table1.todate),所以假設從date = 24-02-2009和todate = 28-02-2009意味着它應該給總共5天,但現在它給3只有天。這是避免24和28。如何得到這個數字也。 – Gopal 2009-10-13 14:46:42