Sql 正在尝试让Running Total开始工作

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

我有一个查询,它可以完美地组合ElapsedTime,当Non-Productive=1时,它被认为是非生产性的。然而,我一直在努力使一个总的运转正常。这是每天按ReportNo汇总的主要查询:

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
    是唯一的,因此两者是等效的)

听起来你需要一个非常棒的地方!非常感谢你。我永远不会算出Sum(Sum)。现在看起来很简单,但通常在你看到它之前,一切都会发生!你真了不起!