Объединение 3 таблиц с похожей структурой - PullRequest
1 голос
/ 28 октября 2009

Я выполняю sql запросы в Oracle 10g.

Я хочу объединить 3 таблицы в одну новую таблицу, содержащую все записи из 3 отдельных таблиц. Баланс должен суммироваться везде, где reg_id дублируется между 3 таблицами, так что в моей новой таблице есть только одна запись на reg_id с суммированным балансом.

Пример данных (аналогичные таблицы, с разными значениями). таблицы: temp1, temp2, temp3

reg_id    |            balance
--------------------------------
92603013               183.77
92611902               419.46
92766121               77.04
93527720               24.84
93581368               120.09
93684684                89.88
93527720               113.66

Цените, если кто-то может помочь мне с синтаксисом.

Ответы [ 2 ]

4 голосов
/ 28 октября 2009

Попробуйте следующее ...

INSERT INTO target_table (reg_id, balance)
SELECT reg_id, sum(balance) as balance
FROM (select reg_id, balance from temp1
      UNION ALL
      select reg_id, balance from temp2
      UNION ALL
      select reg_id, balance from temp3)
GROUP BY reg_id;

Я не пробовал, поэтому не знаю, правильный ли синтаксис и будет ли он ужасно искажать ваши данные. :)

РЕДАКТИРОВАТЬ: изменено UNION на UNION ALL. Спасибо, APC!

РЕДАКТИРОВАТЬ 2: Указал столбцы явно в соответствии с рекомендацией Тони.

1 голос
/ 28 октября 2009

Я бы предложил:

SELECT coalesce(t1.reg_id, t2.reg_id, t3.reg_id) AS the_reg_id,
       coalesce(t1.balance, 0.0) + 
       coalesce(t2.balance, 0.0) +
       coalesce(t3.balance, 0.0) AS the_balance
FROM t1 FULL OUTER JOIN t2 ON (t1.reg_id = t2.reg_id)
        FULL OUTER JOIN t3 ON (t1.reg_id = t3.reg_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...