我有一个表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,但无法让它工作,所以我来这里寻求建议。
答案 0 :(得分:0)
看起来你想要累积总和。在SQL Server 2012+中,您可以执行以下操作:
out
在早期版本中,您可以将SELECT ScheduleID, Ordinal, Duration,
SUM(Duration*7) OVER (ORDER BY Ordinal) - Duration*7 as StartDate
FROM ScheduleRotationDetail srd ;
用于此目的(或相关子查询)。