有没有一种简单的方法可以将值分布在多行中?
例如,我的表包含
类型 已开票 已付 电流 收费 100 0 100 收费 100 0 100 收费 100 0 100 付款 0 250 0 付款 0 25 0
数据是以这种方式导入的,但我需要根据也导入的支付交易来填充Current
和列。Paid
是否有一种简单的方法可以编写查询来确定Current
每条记录的列的余额?
例如,250 将 100 应用于前两条记录,50 应用于接下来的两条,而 25 将应用于最后一条,因此更新Current
表中余额后的最终结果应该是:
类型 已开票 已付 电流 收费 100 100 0 收费 100 100 0 收费 100 75 25 付款 0 250 0 付款 0 25 0
理想情况下,我希望使用单个查询来执行此操作,而不是使用游标单独处理每个项目。我一直在尝试通过使用Row_Number()函数并加入两个子查询来做到这一点,但我知道我在这里遗漏了一些东西
这是我的第一次尝试,结果得到了当前余额的总和
;with cte(invoiced, paid, current)
as (
select invoiced, paid, current
, row_number() over (order by datecreated)
from mytable
)
select t1.invoiced, t1.paid, sum(t2.invoiced - t2.paid) as [current]
from cte as t1
join cte as t2 on t1.number = t2.number and t2.rownum <= t1.rownum
group by t1.uid, t1.number, t1.rownum
order by t1.rownum
结果:
已开票的当前 100 0 100 100 0 200 100 0 300 0 250 50 0 25 25
我确信有办法做到这一点,但现在我的大脑似乎在罢工并且拒绝提出解决方案。