Sql server select语句中的条件和
我试图在select语句表中进行条件求和,但我想不出这样做的方法 总和应持续进行,直到它达到表中的重置标志 当按下重置标志(1)时,需要将增量值设置为0,并且应该从下一行开始再次求和 请看一下我想从我的大表中选择的数据结构Sql server select语句中的条件和,sql-server,Sql Server,我试图在select语句表中进行条件求和,但我想不出这样做的方法 总和应持续进行,直到它达到表中的重置标志 当按下重置标志(1)时,需要将增量值设置为0,并且应该从下一行开始再次求和 请看一下我想从我的大表中选择的数据结构 ID Value ValueIncrement ResetFlag 1 2 2 0 2 3 5 (2+3)
ID Value ValueIncrement ResetFlag
1 2 2 0
2 3 5 (2+3) 0
3 9 14 (2+3+9) 0
4 6 20 (2+3+9+6) 0
5 3 23 (2+3+9+6+3) 0
6 1 24 (2+3+9+6+3+1) 0
7 2 26 (2+3+9+6+3+1+2) 0
8 0 26 (2+3+9+6+3+1+2+0) 0
9 2 30 (2+3+9+6+3+1+2+0+2) 1
10 4 4 0
11 5 9 (4+5) 0
12 3 12 (4+5+3) 0
13 6 18 (4+5+3+6) 0
14 7 25(4+5+3+6+7) 0
15 4 29(4+5+3+6+7+4) 0
16 7 36(4+5+3+6+7+4+7) 0
17 9 45(4+5+3+6+7+4+7+9) 0
18 2 47(4+5+3+6+7+4+7+9+2) 0
19 1 48(4+5+3+6+7+4+7+9+2+1) 0
20 1 49(4+5+3+6+7+4+7+9+2+1+1) 1
我尝试了一些事情,但我无法让它以我需要的方式工作,任何帮助或建议将不胜感激 一种可能的解决方案,使用窗口函数: 表:
CREATE TABLE Data (
ID int,
[Value] int,
ResetFlag int,
)
INSERT INTO Data
(ID, [Value], ResetFlag)
VALUES
(1 , 2, 0),
(2 , 3, 0),
(3 , 9, 0),
(4 , 6, 0),
(5 , 3, 0),
(6 , 1, 0),
(7 , 2, 0),
(8 , 0, 0),
(9 , 2, 1),
(10, 4, 0),
(11, 5, 0),
(12, 3, 0),
(13, 6, 0),
(14, 7, 0),
(15, 4, 0),
(16, 7, 0),
(17, 9, 0),
(18, 2, 0),
(19, 1, 0),
(20, 1, 1)
声明:
;WITH GroupsCTE AS (
SELECT
ID, [Value], ResetFlag,
CASE WHEN LAG(ResetFlag) OVER (ORDER BY ID) = 1 THEN 1 ELSE 0 END AS NewGroup
FROM Data
), FinalCTE AS (
SELECT
ID, [Value], ResetFlag,
SUM(NewGroup) OVER (ORDER BY ID) AS GroupID
FROM GroupsCTE
)
SELECT
ID, [Value], ResetFlag, SUM([Value]) OVER (PARTITION BY GroupID ORDER BY ID) AS ValueIncrement
FROM FinalCTE
结果:
--------------------------------------
ID Value ResetFlag ValueIncrement
--------------------------------------
1 2 0 2
2 3 0 5
3 9 0 14
4 6 0 20
5 3 0 23
6 1 0 24
7 2 0 26
8 0 0 26
9 2 1 28
10 4 0 4
11 5 0 9
12 3 0 12
13 6 0 18
14 7 0 25
15 4 0 29
16 7 0 36
17 9 0 45
18 2 0 47
19 1 0 48
20 1 1 49
你说你试过了,有什么不管用的?你的尝试是什么?(显示您的代码。)这看起来不像是一个有条件的
SUM
,而是一个累积的SUM
。我在select中尝试了SUM(Col1)Over(order by id)作为输出,但它贯穿了整个数据集,这不是我所需要的,我尝试在重设标志被点击时解剖数据集的块,以便它开始为下一个卡盘重新求和。我已经创建了while循环和临时表,但我并没有把所有代码都放在简单的地方。请确认预期结果(第17、18、19、20行)中的值好吗?Zhorov,感谢您的帮助,表分区工作得很好,它确实很好地解析了数据集,并在进行过程中对其进行了总结。再次感谢您的时间和努力。