Sql 如何根据多个记录中存在的交易计算运行剩余余额/金额
我正试图跟进礼品卡的销售和使用情况。 我想计算每张卡的余额 特殊性:我使用的表包含所有完成的事务。每行一笔交易我有一笔交易的金额,但并没有累进余额 如何添加新的列以计算每个交易行之后的剩余余额 在我的表格中,我有许多卡号,上面有两种不同类型的活动销售和使用以及每笔交易的金额,第一笔交易总是指礼品卡的购买和初始金额,其他几行是指礼品卡的实际使用及其实际金额Sql 如何根据多个记录中存在的交易计算运行剩余余额/金额,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正试图跟进礼品卡的销售和使用情况。 我想计算每张卡的余额 特殊性:我使用的表包含所有完成的事务。每行一笔交易我有一笔交易的金额,但并没有累进余额 如何添加新的列以计算每个交易行之后的剩余余额 在我的表格中,我有许多卡号,上面有两种不同类型的活动销售和使用以及每笔交易的金额,第一笔交易总是指礼品卡的购买和初始金额,其他几行是指礼品卡的实际使用及其实际金额 SELECT C_NUMBER, CASE WHEN TRANSACTION_TYPE = 'VEN' THEN 'SALE' E
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' )
我希望得到以下输出:新列计算事件类型使用记录的差异,因为事件销售的剩余余额等于金额
您似乎想要一个累积的总和:
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;
上述代码适用于唯一的数字。 不幸的是,我有很多空卡号和重复的卡号,这使得剩余余额的计算是错误的 我使用交易日期成功地分离了副本
SELECT C_NUMBER, CASE WHEN TRANSACTION_TYPE = 'VEN' THEN 'SALE' ELSE 'USE' END AS
[EVENT], TRANSACTION_DATE, AMOUNT
FROM CARDS_TRANSACTION CT
LEFT OUTER JOIN CARDS_TRANSACTION CARDS_TRANSACTION_SALE ON
CARDS_TRANSACTION_SALE.EVENT = 'SALE' AND
CARDS_TRANSACTION_SALE.C_NUMBER= CT.C_NUMBER AND
CARDS_TRANSACTION_SALE.TRANSACTION_DATE = (SELECT MAX(TRANSACTION_DATE)
FROM CARDS_TRANSACTION
WHERE C_NUMBER = CT.C_NUMBER AND
EVENT = 'SALE' AND
TRANSACTION_DATE <= CT.TRANSACTION_DATE)
有办法处理这个异常吗?使用一个联盟可能会有更多的自由穹顶
提前谢谢