Sql 通过不工作使用over和partition获取累积和

Sql 通过不工作使用over和partition获取累积和,sql,sql-server,Sql,Sql Server,我试图获得记录的累计总和,直到两列的值发生变化。下面是我现在掌握的数据样本 DT缩写为航次缩写为船舶 2017-05-08 16:00:00.000 0001W rmhp tmvpn 2017-05-08 16:00:00.000 0001W rmhp tmvpn 2017-05-09 20:00:00.000 0001W rmhp tmvpn 2017-05-08 16:00:00.000 0002W rmhp hueml 2017-05-08 16:00:00.000 0002W rmhp

我试图获得记录的累计总和,直到两列的值发生变化。下面是我现在掌握的数据样本

DT缩写为航次缩写为船舶
2017-05-08 16:00:00.000 0001W rmhp tmvpn
2017-05-08 16:00:00.000 0001W rmhp tmvpn
2017-05-09 20:00:00.000 0001W rmhp tmvpn
2017-05-08 16:00:00.000 0002W rmhp hueml
2017-05-08 16:00:00.000 0002W rmhp hueml
2017-05-09 20:00:00.000 0002W rmhp hueml
ETB_DT_记录的数量
2017-05-10 12:00:00.000	     17
2017-05-10 12:00:00.000	     17
2017-05-10 12:00:00.000	     10
2017-05-26 14:30:00.000	     10	       
2017-05-26 14:30:00.000	     10	       

2017-05-26 14:30:00.000 10
我在我的系统上做了一些与订单类似的事情

我认为您需要查看“无界前一行和当前行之间的行”

这是我对订单的查询,希望它能帮助您整理订单

SELECT 
  SaleMonth, Month_Order_Count, MonthTotal,   
  SUM(Month_Order_Count) OVER(ORDER BY SaleMonth **ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW**) AS Cumulative_Order_Count,
  SUM(MonthTotal) OVER(ORDER BY SaleMonth **ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW**) AS Cumulative_Order_Value
FROM 
(
  SELECT SUB_Q.SaleMonth, Count( DISTINCT SUB_Q.OrderID) as Month_Order_Count, SUM(Value) as MonthTotal  FROM
  (
    SELECT CONCAT( DatePart( year, OH.OrderDate), '-', FORMAT( OH.OrderDate, 'MM')) as SaleMonth,
    OI.OrderID,
    OI.Value
  FROM ORDERHEADER OH 
  INNER JOIN OrderItem OI ON OI.OrderID = OH.OrderID
  INNER JOIN ECodeOrder ECO ON ECO.OrderId = OH.ORDERID
  ) SUB_Q
  GROUP BY SUB_Q.SaleMonth
)TOTALS_Q
ORDER BY SaleMonth

<>你可以简单地在开始时添加一个CTE,以便考虑分区必须执行的顺序:

DECLARE @t TABLE(
  Dt DATETIME
 ,ABBR_VOYAGE_OUT_N NVARCHAR(20)
 ,ABBR_VESSEL_M NVARCHAR(20)
 ,ETB_DT DATETIME
 ,No_of_records INT
)

INSERT INTO @t VALUES('2017-05-08 16:00:00.000', '0001W', 'rmhp tmvpn', '2017-05-10 12:00:00.000', 17);
INSERT INTO @t VALUES('2017-05-08 16:00:00.000', '0001W', 'rmhp tmvpn', '2017-05-10 12:00:00.000', 17);
INSERT INTO @t VALUES('2017-05-09 20:00:00.000', '0001W', 'rmhp tmvpn', '2017-05-10 12:00:00.000', 10);
INSERT INTO @t VALUES('2017-05-08 16:00:00.000', '0002W', 'rmhp hueml', '2017-05-26 14:30:00.000', 10);       
INSERT INTO @t VALUES('2017-05-08 16:00:00.000', '0002W', 'rmhp hueml', '2017-05-26 14:30:00.000', 10);       
INSERT INTO @t VALUES('2017-05-09 20:00:00.000', '0002W', 'rmhp hueml', '2017-05-26 14:30:00.000', 10);

WITH cte AS(
  SELECT DT, ABBR_VOYAGE_OUT_N, ABBR_VESSEL_M,ETB_DT,No_of_records, ROW_NUMBER() OVER (ORDER BY DT, ETB_DT) AS rn
    FROM @t
)
select DT, ABBR_VOYAGE_OUT_N, ABBR_VESSEL_M,ETB_DT,No_of_records,
       sum(No_of_records) over (partition by ABBR_VOYAGE_OUT_N, ABBR_VESSEL_M ORDER BY rn) as cumulative
from cte
order by ABBR_VOYAGE_OUT_N,ABBR_VESSEL_M

非常感谢这对我的帮助!