我是SQL的新手,在连接2个具有不同行和列的表时遇到问题。
Table 1 (has more than 4 columns)
Colx Coly Colz ColData Col...
x1 y1 z1 a 1
x2 y2 z2 b 2
x3 y3 z3 c 3
x4 y4 z4 d 4
x5 y5 z5 e 5
Table 2 (has 4 columns)
Colx Coly Colz ColData
x1 y2 z1 f
x2 y2 z2 g
x3 y4 z4 h
x4 y4 z4 i
我想要的结果
Colx Coly Colz ColData Col...
x1 y1 z1 a 1
x2 y2 z2 b+g 2
x3 y3 z3 c 3
x4 y4 z4 d+i 4
x5 y5 z5 e 5
x1 y2 z1 f null
x3 y4 z4 h null
排序方式是,如果两个表之间的Colx,Coly,Colz具有完全相同的数据,我想在结果表中汇总ColData,否则,我希望将其保留在结果表中。
我尝试过的方式可能包括左,右联接,完全联接,联合,完全联合,但是结果不是我想要的。但是它总是这样结束的。
Colx Coly Colz ColData Col...
x2 y2 z2 b+e 2
x4 y4 z4 d+i 4
我正在使用SQL Oracle开发人员,但未使用PL / SQL 对不起,我的英语不好。
答案 0 :(得分:2)
我认为您想要full join
:
select colx, coly, colz,
coalesce(t1.colData, 0) + coalesce(t2.colData, 0),
t1.colzzz
from t1 full join
t2
using (colx, coly, colz);
答案 1 :(得分:1)
您可以按以下方式使用union all
和group by
:
Select colx, coly, colz,
Listagg(coldata, '+') within group (order by coldata) as coldata,
-- if coldata is number then use sum(coldata)
Col...
From
(Select colx, coly, colz, coldata, col...
From table1
Union all
Select colz, coly, colz, coldata, null as "col..."
From table2)
Group by colx, coly, colz
干杯!