对行求和并重复值

时间:2019-10-30 00:12:43

标签: oracle

我的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

谢谢。

1 个答案:

答案 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为11021103的位置,因此将它们加在一起。其他记录保留在自己的分区中。

Demo on DB Fiddle

  ID | AMOUNT1 | AMOUNT2 | AMOUNT3
---: | ------: | ------: | ------:
1101 |      10 |      20 |      30
1102 |      15 |      10 |      55
1103 |      20 |      30 |      55
1104 |      40 |      50 |      60
1105 |      70 |      80 |      90