我的oracle数据库表中有以下记录
Id Amount1 Amount2 Amount3
1101 10 20 30
1102 15 10 20
1103 20 30 35
1104 40 50 60
1105 70 80 90
我想对第二行(1102)和第三行(1103)求和,并在第二行和第三行中显示相同的总和。 我的结果应该如下。如何在oracle查询中实现这一目标?
Id Amount1 Amount2 Amount3
1101 10 20 30
1102 35 40 55
1103 35 40 55
1104 40 50 60
1105 70 80 90
谢谢。
答案 0 :(得分:1)
这里是使用解析函数的一种方法。假设id
是唯一列,其值大于0
:
select
id,
amount1,
amount2,
sum(amount3) over(partition by case when id in (1102, 1103) then 0 else id end) amount3
from mytable
order by id
窗口sum()
分配了一个特殊的分区来记录id为1102
或1103
的位置,因此将它们加在一起。其他记录保留在自己的分区中。
ID | AMOUNT1 | AMOUNT2 | AMOUNT3 ---: | ------: | ------: | ------: 1101 | 10 | 20 | 30 1102 | 15 | 10 | 55 1103 | 20 | 30 | 55 1104 | 40 | 50 | 60 1105 | 70 | 80 | 90