SQL SELECT语句,仅当介于两者之间的日期在/不在workdays表中时才使用DATEDIFF
我是SQL的新手,刚开始,但慢慢地把事情弄清楚。我搜索了一下,但找不到任何对我有意义的东西。就像我说的,我是新来的,对不起。如果相关的话,使用SQL Server 2008 R2 我有一张这样的桌子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
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或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮{},以很好地格式化和语法突出显示它!那么你也不需要那些乱七八糟的标签了!很抱歉,谢谢你修理。