Sql 基于计算列计算子查询列

Sql 基于计算列计算子查询列,sql,sql-server,Sql,Sql Server,我有一个表ScheduleRotationDetail,其中包含以下列: ScheduleRotationID ScheduleID Ordinal Duration 379 61 1 1 379 379 2 20 379 512 3 1 379 89 4

我有一个表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
但我需要的“开始日期”列值是:

0
7
147
154

我已经试过CTE,但无法使用,所以我来这里寻求建议。

看起来您想要的是累计金额。在SQL Server 2012+中,您可以执行以下操作:

SELECT ScheduleID, Ordinal, Duration,
       SUM(Duration*7) OVER (ORDER BY Ordinal) - Duration*7 as StartDate
FROM ScheduleRotationDetail srd ;

在早期版本中,您可以使用
APPLY
(或相关子查询)。

请向我们展示您的数据和表定义(后者作为一行即可)。另外,我没有看到在上面的查询中使用CTE。在上面添加了更多信息。刚才说我用CTE试过了,但没法用,所以我把它作为子查询方式。正如@TimBiegeleisen所说,我们需要样本数据和表结构,更清楚地描述
StartDay
的计算应该做什么会有帮助。添加了更多信息。如果您还需要更多信息,或者仍然有点不清楚,请告诉我。将您的查询乘以7即可。非常感谢你的帮助。@HongSmythe。啊,我明白了。
SELECT ScheduleID, Ordinal, Duration,
       SUM(Duration*7) OVER (ORDER BY Ordinal) - Duration*7 as StartDate
FROM ScheduleRotationDetail srd ;