Sql 正在尝试让Running Total开始工作
我有一个查询,它可以完美地组合ElapsedTime,当Non-Productive=1时,它被认为是非生产性的。然而,我一直在努力使一个总的运转正常。这是每天按ReportNo汇总的主要查询:Sql 正在尝试让Running Total开始工作,sql,sql-server,Sql,Sql Server,我有一个查询,它可以完美地组合ElapsedTime,当Non-Productive=1时,它被认为是非生产性的。然而,我一直在努力使一个总的运转正常。这是每天按ReportNo汇总的主要查询: Select SUM(CASE When NonProductive = 1 Then ElapsedTime Else 0 End) From DailyOperations Where
Select SUM(CASE
When NonProductive = 1 Then ElapsedTime
Else 0
End)
From DailyOperations
Where (DailyOperations.WellID = 'ZCQ-5') AND (DailyOperations.JobID = 'Original') and (ReportNo = 9)
ReportNo=9是第一个非生产时间为4的ReportNo。下一个是ReportNo=14。它有5.5小时的非生产时间。所以,当我运行ReportNo 14时,我希望看到的总数是9.5,而不是其他。下面是我用来计算总跑步时间的查询,但它列出了所有非生产时间。因此,对于ReportNo 14,我得到的不是9.5,而是报告中每个非生产时间实例的运行总数:
SELECT (ElapsedTime),(Reportno),NonProductive,
SUM(ElapsedTime) OVER (PARTITION BY NonProductive ORDER BY REPORTNO ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
AS RUNNINGTOTAL
FROM dbo.DailyOperations
WHERE (NonProductive IN(1)) and (WellID = 'ZCQ-5') AND (JobID = 'Original')
Group by ReportNo,ElapsedTime,NonProductive
Order by ReportNo
这给了我:
ReportNo RUNNINGTOTAL
9 4
14 6
14 9.5
我想要的是:
ReportNo RUNNINGTOTAL
9 4
14 9.5
我想你想要:
SELECT Reportno,NonProductive,
SUM(SUM(ElapsedTime)) OVER (PARTITION BY NonProductive ORDER BY REPORTNO) AS RUNNINGTOTAL
FROM dbo.DailyOperations o
WHERE NonProductive IN (1) and WellID = 'ZCQ-5' AND JobID = 'Original')
GROUP BY ReportNo
ORDER BY ReportNo;
注:
定义了结果集中所需的每一行。因此,您只需要在其中添加分组依据
ReportNo
- 在组合窗口函数和聚合函数时,有时会出现外观奇怪的结构,例如
SUM(SUM())
- 窗口子句是不必要的。基本上,当您使用
时,您拥有的是默认值(实际上,默认值是orderby
介于
之间的范围,但是
是唯一的,因此两者是等效的)ReportId