当前位置: 首页 > 面试题库 >

SQL运行总计重置

呼延庆
2023-03-14
问题内容

我有一张桌子,上面有日期和交易记录。我需要计算运行总计(用总和划分很容易),除了当“金额”中存在负值时需要将其重置为零,然后再次开始计算运行总计。有任何想法吗?

account|amount|     date          |total|
123456 |50    |2017-01-01 00:00:00|50
123456 |50    |2017-01-02 00:00:00|100
123456 |100   |2017-01-03 00:00:00|200
123456 |-50   |2017-01-04 00:00:00|0
123456 |100   |2017-01-05 00:00:00|100
123456 |100   |2017-01-06 00:00:00|200

问题答案:

使用更新变量方法,您可以使用重置选项计算运行总计。

declare @tblItems table(
 ID int identity(1, 1),
 Amount decimal(12, 3),
 RunningTotal decimal(12, 3) default(0)
)

insert into @tblItems(Amount)
values
 (50),
 (20),
 (-100),
 (5),
 (10)
;

DECLARE @RunningTotal decimal(12, 3) = 0;

UPDATE @tblItems
SET @RunningTotal = RunningTotal = case when amount<0 then 0 else (@RunningTotal + Amount) end
FROM @tblItems;

SELECT ID, Amount, RunningTotal
FROM @tblItems
ORDER BY ID;


 类似资料:
  • 问题内容: 想象一下下表(称为): 我想要一个按日期顺序返回运行总计的查询,例如: 我知道在SQL Server 2000/2005/2008中可以通过多种方式进行此操作。 我对使用aggregating-set-statement技巧的这种方法特别感兴趣: …这是非常有效的,但是我听说周围存在一些问题,因为您不一定能保证该语句将以正确的顺序处理行。也许我们可以获得有关该问题的明确答案。 但是,人

  • 问题内容: 我正在使用SQL Server 2012构建库存计划/重新排序引擎。 我有一堆过时的交易,称它们为贷方和借方。我想一次做两件事: 生成运行总计(每日净余额) 生成补充建议。补充将重置“总计”(在“#1”中)为零。 该表如下所示: 我正在使用SQL 2012 SUM OVER()窗口函数来显示这些的运行总数。 我需要找到一种方法将运行总计(又称RT)重置为零(如果下降到零以下)。 我的查

  • 问题内容: 我有这个MySQL查询: 返回如下内容: 我真正想要的是末尾的另一列显示运行总计: 这可能吗? 问题答案: 也许这对您来说是一个更简单的解决方案,并且可以防止数据库不得不执行大量查询。这仅执行一个查询,然后在一次通过中对结果进行一点数学运算。 这将为您提供一个额外的RT(运行总计)列。不要错过顶部的SET语句来首先初始化运行的total变量,否则您将只获得一列NULL值。

  • 问题内容: 我有这个MySQL查询: 返回如下内容: 我真正想要的是末尾的另一列以显示运行总计: 这可能吗? 问题答案: 也许对您来说是一个更简单的解决方案,并且可以防止数据库不得不执行大量查询。这仅执行一个查询,然后在一次通过中对结果进行一些数学运算。 这将为您提供一个额外的RT(运行总计)列。不要错过顶部的SET语句来首先初始化运行中的total变量,否则您将只获得一列NULL值。

  • 问题内容: 我正在尝试创建一个简单的图像库,每页显示16张图像。我使用LIMIT 16在页面上显示正确的数量,但是如果行数超过16,我想在底部显示链接,以允许用户导航到下一页。 我知道我可以通过删除限制并简单地使用循环来显示前16个项目来达到期望的结果,但是这样效率很低。显然,COUNTING行数总是= 16。 有人可以建议一种更有效的方法吗? 谢谢 问题答案: 除了要获取其他人都提到的计数的单独

  • 问题内容: 我有一个简单的表,其中包含一些虚拟数据设置: 我可以通过执行以下sql(MSSQL 2008)语句来选择运行总计: 这将给我如下结果: 现在可以只为每个用户检索最新的行吗?因此结果将是: 我要这样做正确吗?任何建议或遵循的新路径都将是很棒的! 问题答案: 试试这个: SQL小提琴演示