2016-07-08 3 views
0

Я новичок в SQL,Как добавить/объединить SUM из 2 таблиц Oracle, Basic

У меня есть два кода, как этот

Select ID, SUM(Column1) AS Sum1 
from table1 

Select ID, SUM(Column1) AS Sum2 
from table2 

В результате table1

ID------ Sum1 
001  20 
003  10 
004  5 

AS результат таблицы2

ID------ Sum2 
001  20 
003  10 
005  10 

Я бы хотел, чтобы s как результат после присоединения к этим 2 таблицам, как это, как я могу описать код, как показано ниже?

ID------ Sum 
    001  40 
    003  20 
    004  5 
    005  10 

Спасибо большое

+0

ваши первые запросы будут возвращать ошибка, я предполагаю, что в примере отсутствует предложение group by, что вы пробовали до сих пор? – mcha

ответ

3
SELECT ID, SUM(COLUMN1) 
FROM (
    SELECT ID, COLUMN1 FROM T1 
    UNION ALL 
    SELECT ID, COLUMN1 FROM T2 
) 
GROUP BY ID; 

Отметим здесь, что UNION ALL используется вместо UNION, так что вы можете показать дублированные результаты

0

Вы можете FULL JOIN двух подзапросов вместе (после добавления GROUP BY к каждому), и использовать COALESCE() вернуть правильное значение:

SELECT COALESCE(a.ID,b.ID) AS ID 
    , COALESCE(a.Sum1,0)+COALESCE(b.Sum2,0) AS Sum 
FROM (Select ID, SUM(Column1) AS Sum1 
     from table1 
     GROUP BY ID 
    ) a 
FULL JOIN (Select ID, SUM(Column1) AS Sum2 
      from table2 
      GROUP BY ID 
      )b 
    ON a.ID = b.ID 

FULL JOIN или FULL OUTER JOIN будут возвращать записи с каждой стороны соединения, присоединяются ли они или нет. COALESCE() возвращает первое значение, отличное от NULL, из списка параметров, которые вы его поставляете.

В качестве альтернативы, вы можете UNION два комплекта до суммирования:

SELECT ID, SUM(Column1) AS Sum 
FROM (Select ID, Column1 
     FROM table1 
     UNION ALL 
     Select ID, Column1 
     FROM table2 
    ) sub 
GROUP BY ID 
Смежные вопросы