运行 总和给出不同的结果

Running Sum gving Different results

这是我的 table:

cust_id order_id order_date total_value 运行 总计 我的总数
1 2 2021 年 7 月 20 日 100 100 300
1 3 2021 年 7 月 21 日 200 300 300

我的问题:我正在尝试计算 运行 总数:

mytotal = sum(total_value)(order by order_date)

running total = sum(total_value)(order by order_id)

为什么 mytotal 返回一个常量值而不是与 runningtotal 相同的值?造成这种差异的原因是什么?

如下所示将 OVER 子句与 SUM 结合使用。

SELECT 
cust_id, 
SUM (total_value) OVER (ORDER BY cust_id) AS runningTotal,
FROM orders

你一定是做错了什么。看下面:

declare @test table (
    cust_id int,
    order_id int,
    order_date date,
    total_value int
    );

INSERT INTO @test VALUES
(1, 2, '2021-07-20', 100),
(1, 3, '2021-07-21', 200);

SELECT cust_id, order_id, order_date, total_value, 
SUM(total_value) OVER (order by order_date) as mytotal,
SUM(total_value) OVER (order by order_id) as running_total
FROM @test;
    

输出:

cust_id order_id order_date total_value mytotal running_total
1 2 2021-07-20 100 100 100
1 3 2021-07-21 200 300 300

如您所见,mytotal 和 running_total 相同。

为了进一步帮助您,请向我们展示您在做什么。为此,请像我为您所做的那样提供 table 创建和插入数据语句,以及您正在使用的确切代码,或者至少是一个复制您的问题的简化版本。请注意,您的代码中的表达式缺少 OVER.

您需要添加ROWS UNBOUNDED PRECEDING.

默认的 window 是 RANGE UNBOUNDED PRECEDING,如果有两行具有相同的顺序(在本例中,相同的 id),这将给你不正确的结果:

mytotal = sum(total_value) over (order by order_date rows unbounded preceding)
running total = sum(total_value) over (order by order_id rows unbounded preceding)