Соедините 2 таблицы с разными строками и столбцами - PullRequest
1 голос
/ 15 января 2020

Я новичок в 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

В сортировке я хочу суммировать ColData в таблице результатов, если Colx, Coly, Colz между двумя таблицами имеют точно такие же данные, если не хочу, чтобы оно оставалось в таблице результатов.

Я пытался включить, влево, вправо, полное объединение, объединение, полное объединение, но результат не тот, который я хочу. Но это всегда так:

Colx      Coly      Colz      ColData      Col...
x2        y2        z2        b+e          2
x4        y4        z4        d+i          4

Я использую SQL Oracle разработчика, но не использую PL / SQL Извините за мой плохой Engli sh.

Ответы [ 2 ]

2 голосов
/ 15 января 2020

Я думаю, что вы хотите 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 голос
/ 15 января 2020

Вы можете использовать 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

Cheers !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...