根据条件在SQL Server中运行总计

基尔蒂加

我正在按顺序为特定组创建运行总计。在序列之间出现零值,为此我必须从零记录开始运行总计

select 
    Sno,
    Group,
    Value,
    sum(Value) over(partition by Group order by Sno) Cum_Value 
from 
    Table

输出:

Sno Group   Value   CumValue
-------------------------------
1   A   5   5
2   A   10  15
3   A   25  40
4   A   0   40
5   A   10  50
6   A   5   55
7   A   0   55
7   A   20  75

Sno Group   Value   CumValue
------------------------------
1   A   5   5
2   A   10  15
3   A   25  40
4   A   0   0--> zero occurs [starts running total again]
5   A   10  10
6   A   5   15
7   A   0   0--> zero occurs [starts running total again]
7   A   20  20
佐罗夫

您可以尝试以下方法:

输入:

CREATE TABLE #Data (
    Sno int, 
    [Group] varchar(1),   
    [Value] int
)
INSERT INTO #Data 
   (Sno, [Group], [Value])
VALUES
    (1, 'A', 5), 
    (2, 'A', 10), 
    (3, 'A', 25), 
    (4, 'A', 0),  
    (5, 'A', 10), 
    (6, 'A', 5),  
    (7, 'A', 0),  
    (8, 'A', 20)

声明:

SELECT
    Sno, 
    [Group], 
    [Value],
    Changed,
    SUM([Value]) OVER (PARTITION BY Changed ORDER BY Sno) AS Cum_Value
FROM 
    (
    SELECT 
        Sno, 
        [Group], 
        [Value],
        SUM (CASE 
            WHEN [Value] = 0 THEN 1
            ELSE 0
        END) OVER (PARTITION BY [Group] ORDER BY Sno) AS Changed
    FROM #Data
    ) t

输出:

Sno Group   Value   Cum_Value
1   A       5       5
2   A       10      15
3   A       25      40
4   A       0       0
5   A       10      10
6   A       5       15
7   A       0       0
8   A      20       20

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章