gpt4 book ai didi

sql - 使用任何联接时重复记录

转载 作者:行者123 更新时间:2023-12-05 01:49:18 26 4
gpt4 key购买 nike

我有两张 table 。第一个表有一个正值,第二个表有一个负值。像这样

enter image description here

enter image description here

我测试了结合两个表,根据 trx_number 从 SUM(positive.nett) 和 SUM(negative.nett) 中得出总数,然后我将结合结果总计(SUM positive + SUM negative)

SELECT p.trx_number,
SUM(p.nett) total1,
SUM(n.nett) total2
FROM positif p
FULL JOIN negatif n
ON p.trx_number = n.trx_number
GROUP BY p.trx_number

但是结果是这样的

enter image description here

我意识到数字3(trx_id)有一个重复的结果,数字3的结果应该是相同的正负数。我试图解决这个问题,但它仍然不起作用。

请帮帮我

最佳答案

在连接表之前使用内部连接和 GROUP BY。

示例

create table positif ( trx, nett )
as
select 3, 2147600 from dual union all
select 3, 2068300 from dual union all
select 4, 50000 from dual union all
select 5, 100000 from dual ;

create table negatif ( trx, nett )
as
select 3, -1073800 from dual union all
select 3, -1073800 from dual union all
select 3, -2068300 from dual union all
select 4, -20000 from dual union all
select 5, -100000 from dual ;

查询

select P.trx, P.sum_ totalpos, N.sum_ totalneg
from
( select trx, sum( nett ) sum_ from positif group by trx ) P
join
( select trx, sum( nett ) sum_ from negatif group by trx ) N
on P.trx = N.trx
order by 1
;

-- result
TRX TOTALPOS TOTALNEG
3 4215900 -4215900
4 50000 -20000
5 100000 -100000

DBfiddle

完全连接的主要问题是它返回太多行。例如,尝试只加入 TRX 列 -> 你得到 2 乘以 3 (6) 行。您需要的是:每个 TRX 值一行。 (因此,在加入之前先分组。)

太多行...

select P.trx
from positif P full join negatif N on P.trx = N.trx ;

TRX
3
3
3
3
3
3
4
5

备选方案:您还可以使用 UNION ALL,然后使用 GROUP BY(和总和),例如

联合所有

select trx, nett as pos, null as neg from positif
union all
select trx, null, nett from negatif ;

-- result
TRX POS NEG
3 2147600 null
3 2068300 null
4 50000 null
5 100000 null
3 null -1073800
3 null -1073800
3 null -2068300
4 null -20000
5 null -100000

分组和求和

select trx 
, sum ( pos ) totalpos, sum( neg ) totalneg
from (
select trx, nett as pos, null as neg from positif
union all
select trx, null, nett from negatif
)
group by trx
order by 1 ;

-- result
TRX TOTALPOS TOTALNEG
3 4215900 -4215900
4 50000 -20000
5 100000 -100000

关于sql - 使用任何联接时重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74242545/

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