Sql server 如何计算天数?

Sql server 如何计算天数?,sql-server,Sql Server,使用SQLServer2005 表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(da

使用SQLServer2005

表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
...,
它应该合计天数,并显示在一行中

注意:假设我选择的是特定的期间日期,这意味着它应该只显示该日期

比如说

如果日期介于2009年2月26日至2009年3月3日之间,则应显示

ID Name Total Days

001 Raja 30 3
...,
因为我是在2009年2月25日之后约会的

Expected Output

ID Name Total Days

001 Raja 30 6
002 Ravi 22 16

如何修改我的查询?

我认为按查询分组会更简单:

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

DATEDIFF给出了两个日期之间的天数差,因此同样地,1和3之间的差是2(3-1=2),DATEDIFF(d)实际上是D2-D1。因此,为了补偿您要计算的额外天数,您需要在(ToDate或FromDate)中添加一天来抵消日期:

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

不,我使用的是DATEDIFF(day,table1.fromdate,table1.todate),所以假设fromdate=24-02-2009,todate=28-02-2009意味着它应该给出总计5天,但现在它只给出了3天。这是避免24和28。如何获得该计数。不,我使用DATEDIFF(day,table1.fromdate,table1.todate),因此假设fromdate=24-02-2009,todate=28-02-2009意味着它应该给出5天的总数,但现在只给出3天。这是避免24和28。如何获得该计数。请参阅更新后的内容。如果您的日期是
24-02-2009
28-02-2009
DATEDIFF
将为您提供
4
天,而不是
3
。顺便说一句,在表1的数据转储中,2009年2月29日不是有效日期。2009年不是闰年,SQL Server将大声疾呼。