我是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的表。我希望这是有道理的。如果完全不可能做到这一点,或者用当前的结构来完成它,那将是很好的事情(因此我可以推动更好的工作日/非工作日表等)。任何帮助将不胜感激,可能会换成我的长子。
答案 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