【问题标题】:how to get balance sheet (debit , credit , balance) from transactions table in SQL?如何从 SQL 中的交易表中获取资产负债表(借方、贷方、余额)?
【发布时间】:2022-07-14 22:59:28
【问题描述】:

如果我有这样的交易表:

+----+--------+------------+-------------+--------+
| id | userID | debitAccID | creditAccID | amount |
+----+--------+------------+-------------+--------+
|  1 |      1 |          1 |           2 |    500 |
|  2 |      1 |          1 |           3 |    600 |
|  3 |      1 |          3 |           1 |    200 |
+----+--------+------------+-------------+--------+

如何使用什么查询来为 id 为 1 的帐户获取表:

+----+--------+------------+-------------+--------+
|   debit      | credit      |balance |
+----+--------+------------+-------------+--------+
| |        500 |             |    500 |
| |        600 |             |   1100 |
| |            |          200|    900 |
+----+--------+------------+-------------+--------+
                                  900

 

【问题讨论】:

    标签: sql


    【解决方案1】:

    假设id 列显示了正确的交易顺序,您可以使用casewindow 以及默认的rows between unlimited preceding and current row 来获取您的输出:

    select id, user_id, 
           case when user_id = debit_acc_id then amount else 0 end as debit,
           case when user_id = credit_acc_id then amount else 0 end as credit,
           sum(case when user_id = debit_acc_id then amount else 0 end) over w 
           - sum(case when user_id = credit_acc_id then amount else 0 end) over w as balance
      from transactions
     where user_id = 1
    window w as (partition by user_id order by id)
     order by user_id, id;
    

    db小提琴here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多