我有这样的数据
id cp_id amount_a amount_b
CCP1 TTP01 10.000.000 2.000.000
CCP1 TTP02 10.000.000 3.000.000
CCP1 TTP03 10.000.000 1.000.000
CCP1 TTP04 10.000.000 500.000
CCP2 TTP05 5.000.000 1.000.000
CCP2 TTP06 5.000.000 2.000.000
CCP3 TTP07 1.000.000 500.000
我希望结果数据添加一列running_balance,如下所示
id amount_a amount_b running_balance
CCP1 10.000.000 2.000.000 8.000.000
CCP1 10.000.000 3.000.000 5.000.000
CCP1 10.000.000 1.000.000 4.000.000
CCP1 10.000.000 500.000 3.500.000
CCP2 5.000.000 1.000.000 4.000.000
CCP2 5.000.000 2.000.000 2.000.000
CCP3 1.000.000 500.000 500.000
我已经像这样查询了
/* Formatted on 1/26/2017 2:50:06 PM (QP5 v5.115.810.9015) */
SELECT B.NO_KLAIM AS id,
a.amount AS amount_a,
B.AMOUNT AS amount_b,
SUM (A.AMOUNT) OVER (ORDER BY B.AMOUNT ROWS UNBOUNDED PRECEDING)
AS running_balance
FROM TRX_TITIPAN A
JOIN
TRX_KLAIM_TITIPAN B
ON A.NO_RESI_TITIPAN = B.NO_RESI_TITIPAN
GROUP BY B.NO_KLAIM, B.AMOUNT, a.amount
但结果未计算amount_a,仅为amount_b运行总计。
**更新: 我已经对我的查询进行了更新。
/* Formatted on 1/26/2017 2:50:06 PM (QP5 v5.115.810.9015) */
SELECT B.NO_KLAIM AS id,
a.amount AS amount_a,
B.AMOUNT AS amount_b,
NVL (TITIP.AMOUNT, 0)
- SUM (NVL (KLAIM.AMOUNT, 0))
OVER (PARTITION BY TITIP.AMOUNT
ORDER BY TITIP.NO_RESI_TITIPAN,
KLAIM.NO_KLAIM,
TITIP.AMOUNT,
KLAIM.AMOUNT asc
ROWS UNBOUNDED PRECEDING) as running_balance
FROM TRX_TITIPAN A
JOIN
TRX_KLAIM_TITIPAN B
ON A.NO_RESI_TITIPAN = B.NO_RESI_TITIPAN
GROUP BY B.NO_KLAIM, B.AMOUNT, a.amount
使用具有特定ID的 WHERE id = .... 条件时,运行余额正常工作。当我删除 WHERE id = .... 条件时,它会出错。
答案 0 :(得分:5)
我想你以后:
SELECT B.NO_KLAIM AS id,
a.amount AS amount_a,
B.AMOUNT AS amount_b,
a.amount - SUM (B.AMOUNT)
OVER (partition by b.no_klaim ORDER BY B.cp_id ROWS UNBOUNDED PRECEDING)
AS running_balance
FROM TRX_TITIPAN A
JOIN
TRX_KLAIM_TITIPAN B
ON A.NO_RESI_TITIPAN = B.NO_RESI_TITIPAN
答案 1 :(得分:4)
如果附上表格的描述会更容易。
根据您提供的样本数据:
select id, amout_a, amount_b,
amount_a - sum(amount_b) over (partition by id order by id, cp_id) as running_balance
from table;
尝试将其翻译成表格,提供:
SELECT B.NO_KLAIM AS id,
a.amount AS amount_a,
B.AMOUNT AS amount_b,
a.amount - SUM(B.AMOUNT) OVER (PARTITION BY B.NO_KLAIM ORDER BY B.NO_KLAIM/*, HERE PUT WHAT IS cp_id*/) AS running_balance
FROM TRX_TITIPAN A
JOIN
TRX_KLAIM_TITIPAN B
ON A.NO_RESI_TITIPAN = B.NO_RESI_TITIPAN
您只需填写一列代表cp_id