我正在尝试对礼品卡的销售和使用进行跟进。 我想计算每张卡的运行剩余余额。
特异性:我使用的表包含所有已完成的事务。 (每行一笔交易)我有一笔交易,但没有累进余额。
在每次交易(第行)后,我如何添加一个新的科隆来计算剩余余额
在我的表中,我有很多卡号,其中包含2种不同类型的事件(Sale和USE)以及每笔交易的金额,第一次交易始终是指礼品卡的购买和初始金额,其他行是指礼品卡的实际用途及其实际金额。
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' )
我希望得到以下输出:(新列为事件类型“使用”的记录计算差异,因为事件“销售”中的余额等于金额。
答案 0 :(得分:1)
您似乎想要累积的总和:
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;
答案 1 :(得分:0)
上面的代码适用于唯一数字。 不幸的是,我有很多空卡号和重复号,这也使得剩余余额的计算错误。
我设法使用交易日期分隔重复项
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)
是否可以处理此异常?使用UNION也许会有更多的自由度?
预先感谢