基于计算列计算子查询列

时间:2016-02-25 00:24:08

标签: sql sql-server

我有一个表ScheduleRotationDetail,其中包含以下列:

ScheduleRotationID  ScheduleID  Ordinal Duration
379                 61          1       1
379                 379         2       20
379                 512         3       1
379                 89          4       20

我有一个类似的查询,以便获得每个日程表应该开始的一年中的日期:

SELECT ScheduleID, Ordinal, Duration,
                ,Duration * 7 AS DurationDays
                ,( SELECT ( ISNULL( SUM(ISNULL( Duration, 0 )), 0 ) - 1 ) * 7 
                   FROM ScheduleRotationDetail WHERE ScheduleRotationID = srd.ScheduleRotationID
                       AND Ordinal <= srd.Ordinal ) AS StartDay
FROM ScheduleRotationDetail srd 
WHERE srd.ScheduleRotationID = 379

将其作为结果集输出:

ScheduleID  Ordinal   Duration  DurationDays    StartDay
61          1         1           7             0
379         2         20          140           140
512         3         1           7             147
89          4         20          140           287

然而,我需要的开始日列值是:

0
7
147
154

我曾尝试过CTE,但无法让它工作,所以我来这里寻求建议。

1 个答案:

答案 0 :(得分:0)

看起来你想要累积总和。在SQL Server 2012+中,您可以执行以下操作:

out

在早期版本中,您可以将SELECT ScheduleID, Ordinal, Duration, SUM(Duration*7) OVER (ORDER BY Ordinal) - Duration*7 as StartDate FROM ScheduleRotationDetail srd ; 用于此目的(或相关子查询)。