sql - 不能使用 SQL 滞后总和
问题描述
我的查询是这样的
SELECT
[day], [time],AvaliableTimes,
CASE
WHEN AvaliableTimes > 0
THEN SUM(AvaliableTimes) OVER (ORDER BY [day], [time], AvaliableTimes)
ELSE 0
END AS SumValue
FROM
[AvailableTimes]
WHERE
[day] = 1 AND BranchAreaId = 1
ORDER BY
[day], [time], AvaliableTimes
如果值为 null 或 0,我想从 0 开始求和。
结果:
解决方案
您可以使用递归 CTE 来执行此操作。执行 rcte 中的累积和,如果 AvailableTimes = 0,则重置它
; with
cte as
(
select *, rn = row_number() over (order by time)
from yourtable
),
rcte as
(
select *, sumvalues = AvailableTimes
from cte
where rn = 1
union all
select c.*, sumvalues = case when c.AvailableTimes <> 0
then r.sumvalues + c.AvailableTimes
else c.AvailableTimes
end
from cte c
inner join rcte r on c.rn = r.rn + 1
)
select day, time, AvailableTimes, sumvalues
from rcte
order by time
推荐阅读
- elasticsearch - 从 S3 恢复数据
- c# - System.Xml.XmlException:根级别的数据无效。第 1 行,位置 1 - 有效的 XML 文件?
- excel - 无法通过 VBA 连接到 PostgreSQL DB
- c# - MVC Web应用程序c#中的文件夹选择
- html - 使复选框可点击外部标签
- java - 如何比较保存在 ArrayList 中的对象中的字符串,然后添加这些字符串的值(如果它们彼此相等)
- c# - C# Winform 如何允许面板在面板的父级之外绘制?
- android - Play 服务和 Firebase 版本出错
- php - PHP为什么我只能将1个单一数据插入我的数据库(mysql)
- c# - Unity [Command] 功能不执行 - UNet