相关子查询返回值 - 1

时间:2016-02-22 21:22:31

标签: sql-server tsql correlated-subquery lead

我有一张日历表,可以让我计算工作日。我运行的最基本的查询是这样的:

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

以下是我的小数据集的结果:

test data

第7行脱颖而出。它表示在两个日期之间经过了173天,但是当我运行查询选择明确的日期我得到174天。第8行也很奇怪,显然有两个日期,但它返回为NULL。

我真的不明白这里发生了什么。

0 个答案:

没有答案