我有一个日历表,可以让我计算工作日。我运行的最基本的查询是这样的:
SELECT SUM(calD.busDay) [Sum Of Days]
FROM [dbo].[CalendarDays] calD
WHERE calD.calDay BETWEEN '1/1/2016' AND '1/3/2016'
由于元旦不是工作日(对我们来说),但第 2 天和第 3 天是,那么[Sum Of Days] = 2
。
但是,当我将它放入这样的相关子查询中时,输出并不一致:
SELECT c2.*,
(SELECT SUM(calD.busDay) [Sum Of Days]
FROM [dbo].[CalendarDays] calD
WHERE calD.calDay BETWEEN c2.[thisDate] AND c2.[Next Date]) [Days In Step]
FROM
(SELECT c.*,
CASE WHEN LEAD(c.[ID], 1) OVER (ORDER BY c.[ID], c.[thisDate]) = c.[ID]
THEN LEAD(c.[thisDate], 1) OVER (ORDER BY c.[ID], c.[thisDate])
ELSE NULL END [Next Date]
FROM [dbo].[tbl_Test] c ) c2
这是我使用小数据集的结果:
第 7 行很突出。它说两个日期之间经过了 173 天,但是当我为明确的天数运行查询时,我得到 174 天。第 8 行也很奇怪,显然那里有两个日期,但它返回为 NULL。
我真的不明白这里发生了什么。