Sql 基于计算列计算子查询列
我有一个表ScheduleRotationDetail,其中包含以下列: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
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 ;