Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何根据多个记录中存在的交易计算运行剩余余额/金额_Sql_Sql Server_Tsql - Fatal编程技术网

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)
有办法处理这个异常吗?使用一个联盟可能会有更多的自由穹顶

提前谢谢