连接具有不同行和列的2个表

时间:2020-01-15 11:26:41

标签: sql oracle join datatables sum

我是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 对不起,我的英语不好。

2 个答案:

答案 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 allgroup 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

干杯!