首页 > 解决方案 > 如何根据多条记录中存在的交易计算运行剩余余额/金额

问题描述

我正在尝试跟进礼品卡的销售和使用情况。我想计算每张卡的运行余额。

特异性:我使用的表包含所有已完成的交易。(每行一笔交易)我有一笔交易,但没有累进余额。

我如何添加一个新的冒号来计算每次交易后的余额(行)

在我的表中,我有许多卡号,有 2 种不同类型的事件(销售和使用)和每笔交易的金额,第一次交易总是指礼品卡的购买和初始金额,其他行指的是实际使用礼品卡的实际金额。

在此处输入图像描述

   SELECT C_NUMBER,
   CASE WHEN TRANSACTION_TYPE = 'VEN' THEN 'SALE' ELSE 'USE' END AS 
   [EVENT],
    TRANSACTION_DATE, AMOUNT FROM CARDS_TRANSACTION 
    WHERE C_NUMBER in ( '111111111895' , '16222222225082' )

我期望以下输出:(新列计算事件类型“使用”的记录的差异,因为事件“销售”的剩余余额等于金额。

在此处输入图像描述

标签: sqlsql-servertsql

解决方案


您似乎想要一个累积总和:

select ct.*,
       sum(case when event = 'SALE' then amount
                when event = 'USE' then - amount
           end) over (partition by number order by trans_date
                     ) as balance
from cards_transaction ct;

推荐阅读