gpt4 book ai didi

SQL:行和列之间的数量差异

转载 作者:太空狗 更新时间:2023-10-30 01:56:25 25 4
gpt4 key购买 nike

我有一张 table 使用以下数据

Table X             
Seq_no A Claim Payment Balance (to be calculated)
1 abc 100 10 90 (100-10)
2 abc 50 40 (90-50)
3 abc 20 20 (40-20)
1 xyz 150 10 140 (150-10)
1 qwe 200 10 190 (200-10)

我需要计算余额列。

我正在尝试使用以下查询数据库 >

Select
Seq_no, a, Claim, Payment,
CASE
When Seq_no =1
then (claim-Payment)
Else ( lag(Balance)- Payment over (order by Balance))
END as Balance
from table X

但是我得到了一个错误

ORA-00904: "Balance": invalid identifier
00904. 00000 - "%s: invalid identifier"

我相信这是因为 Balance 不是现有的列名。

是否有正确的方法来实现结果?

更新:*我错过了一个重要的部分。 *

我的数据格式如下:

Table X             
Seq_no A Claim Payment
1 abc 100 10
2 abc 100 50
3 abc 100 20
1 xyz 150 10
1 qwe 200 10

我需要以下格式的结果。

Table X             
Seq_no A Claim Payment Balance (to be calculated)
1 abc 100 10 90 (100-10)
2 abc 50 40 (90-50)
3 abc 20 20 (40-20)
1 xyz 150 10 140 (150-10)
1 qwe 200 10 190 (200-10)

已完成 Seq_no 计算,使重复 claim 情况下的 claim 列为空,我已经弄明白了。

最佳答案

您不能在创建之前引用余额。

您可以为您想要实现的目标使用“运行总和”。

请注意,我按 A 进行了分区,因为您希望每个 A 都有另一个余额。

Select
Seq_no, a, Claim, Payment,
sum(nvl(claim,0) - payment) over (partition by A order by seq_no) as Balance
from X;

结果:

SEQ_NO  A   CLAIM   PAYMENT BALANCE
1 abc 100 10 90
2 abc 50 40
3 abc 20 20
1 qwe 200 10 190
1 xyz 150 10 140

编辑:对于较新的数据集,您只需将 nvl 函数替换为 seq=1 的情况:

Select
Seq_no,
a,
case when seq_no=1 then claim else 0 end as Claim,
Payment,
sum(case when seq_no=1 then claim else 0 end - payment)
over (partition by A order by seq_no) as Balance
from X;

关于SQL:行和列之间的数量差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35194129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com