我到处寻找,但在这里找不到我的答案。 查询的表格是:
Temptable
id Value P money1 money2 difference
1 B O 100 null -100
1 B S null 100 100
1 E O 100 null -100
1 E S null 100 100
1 O O 100 null -100
1 O S null 100 100
2 B O 456 null -456
2 B S null 456 456
2 E O 456 null -456
2 E S null 456 456
2 O O 456 null -456
2 O S null 456 456
我想要的是将行与相同的ID组合在一起。 所以在查询之后结果应该是:
id Value P money1 money2 difference
1 E O 100 100 0
1 E S 100 100 0
1 B O 100 100 0
1 B S 100 100 0
1 O O 100 100 0
1 O S 100 100 0
2 E O 456 456 0
2 E S 456 456 0
2 B O 456 456 0
2 B S 456 456 0
2 O O 456 456 0
2 O S 456 456 0
因此,如果id 1 money2为null,则该值应填入id为1的地方,其中填写了money2。这是因为我需要记录差异小于1并且表格随值一起提供不同的栏目。
答案 0 :(得分:2)
我猜你只需要一个小组:
SELECT t.id,
t.value,
SUM(money1) AS money1,
SUM(t.money2) AS money2,
SUM(difference) AS difference
FROM temptable t
GROUP BY t.id, t.value
编辑:我看到您更改了示例数据。您可以使用分析函数获得新结果:
SELECT t.id,
t.value,
t.p,
SUM(t.money1) OVER (PARTITION BY t.id, t.value) AS money1,
SUM(t.money2) OVER (PARTITION BY t.id, t.value) AS money2,
SUM(difference) OVER (PARTITION BY t.id, t.value) AS difference
FROM temptable t
这样,您将打印所有行
答案 1 :(得分:2)
试试这个:
SELECT id, `value`, SUM(money1) money1, SUM(money2) money2, SUM(difference) difference
FROM Temptable
GROUP BY id, `value`;
答案 2 :(得分:2)
通过sum
和nvl
select max(id) id, value,
sum(nvl(money1,0)) money1, sum(nvl(money2,money1)) money2,
sum(nvl(money2,money1)) - sum(nvl(money1,0)) difference
from Temptable
group by id, value;
答案 3 :(得分:1)