SQL SELECT语句,DATEDIFF仅当两者之间的日期不在工作日表中时

时间:2013-01-18 17:15:47

标签: 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  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

我没有设置表格,也无法以任何方式更改它们。我试过了,我不会被允许的。我甚至无法直接向db admin发送电子邮件。整齐。

我需要选择我可以处理的某些列,但是我需要一个列,它将是StartDate和EndDate值之间的天数,但前提是它们之间的天数是在工作日IsWorkday的值为Y的表。我希望这是有道理的。如果完全不可能做到这一点,或者用当前的结构来完成它,那将是很好的事情(因此我可以推动更好的工作日/非工作日表等)。任何帮助将不胜感激,可能会换成我的长子。

1 个答案:

答案 0 :(得分:0)

试试这个

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