SQL SELECT语句,仅当介于两者之间的日期在/不在workdays表中时才使用DATEDIFF

SQL SELECT语句,仅当介于两者之间的日期在/不在workdays表中时才使用DATEDIFF,sql,select,sql-server-2008-r2,Sql,Select,Sql Server 2008 R2,我是SQL的新手,刚开始,但慢慢地把事情弄清楚。我搜索了一下,但找不到任何对我有意义的东西。就像我说的,我是新来的,对不起。如果相关的话,使用SQL Server 2008 R2 我有一张这样的桌子 AccountNumber StartDate EndDate 123456 2012-05-07 12:55:55.000 2012-05-09 09:53:55.000 789012 2012-10-17 13:55:55.000

我是SQL的新手,刚开始,但慢慢地把事情弄清楚。我搜索了一下,但找不到任何对我有意义的东西。就像我说的,我是新来的,对不起。如果相关的话,使用SQL Server 2008 R2

我有一张这样的桌子

AccountNumber  StartDate                EndDate
  123456       2012-05-07 12:55:55.000  2012-05-09 09:53:55.000
  789012       2012-10-17 13:55:55.000  2012-11-02 10:53:55.000
  345678       2012-11-13 14:55:55.000  2012-12-14 11:53:55.000
Date        IsWorkday  DayOfWeek
2012-01-01     N          1
2012-01-02     N          2
2012-01-03     Y          3
2012-01-04     Y          4
2012-01-05     Y          5
2012-01-06     Y          6

Etc. through 2020-12-31
我还有一个workdays表,结构如下

AccountNumber  StartDate                EndDate
  123456       2012-05-07 12:55:55.000  2012-05-09 09:53:55.000
  789012       2012-10-17 13:55:55.000  2012-11-02 10:53:55.000
  345678       2012-11-13 14:55:55.000  2012-12-14 11:53:55.000
Date        IsWorkday  DayOfWeek
2012-01-01     N          1
2012-01-02     N          2
2012-01-03     Y          3
2012-01-04     Y          4
2012-01-05     Y          5
2012-01-06     Y          6

Etc. through 2020-12-31
我没有摆好桌子,也没有办法换。我试过了,我不会被允许的。我甚至不能直接给数据库管理员发电子邮件。整洁

我需要选择某些列,我可以处理这些列,但我需要在末尾有一个列,用于计算StartDate和EndDate值之间的天数,但前提是这两个值之间的天数在workdays表中,IsWorkday的值为Y。我希望这是有道理的。如果在目前的结构下根本不可能做到,或者要想做到这一点需要非常大的麻烦,那么我也应该知道,这样我就可以争取一个更好的工作日/非工作日表格或其他东西。任何帮助都将不胜感激,可能会被我的长子所交换。

试试这个

SELECT X.*, X2.DayCnt 
FROM AccountTable X
INNER JOIN 
(
    SELECT a.accountnumber,a.StartDate, b.EndDate, Count(b.Date) DayCnt 
    FROM AccountTable a
    LEFT OUTER JOIN workdays w 
        ON a.StartDate >= w.date and 
        a.EndDate <= w.date and 
        IsWorkday = 'Y'
    GROUP BY a.accountnumber,a.StartDate, b.EndDate
) X2 
ON X.accountnumber = X2.accountnumber and
X.StartDate = X2.StartDate and X.EndDate = X2.EndDate

这没有考虑星期五到星期一的日期范围。听起来OP不希望在结果中添加周六/周日。或者假日。OP已经有了带有isWorkDay标志的workday表,他还提到了StartDate和EndDate值之间的天数计数,但前提是这两个值之间的天数在workdays表中,isWorkDay的值为Y。这太完美了,谢谢。长子是你的。我想,想要利用StartDate和EndDate中的时间来实现小时数的差异是一件相当大的事情?我不需要这样做,只是想知道和学习。现在,我要潜入水中。再次谢谢你。我了解了别名:欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮{},以很好地格式化和语法突出显示它!那么你也不需要那些乱七八糟的标签了!很抱歉,谢谢你修理。