2016-07-08 6 views
0

Ich bin sehr neu in SQL,Wie Hinzufügen/kombinieren SUM aus 2 Tabellen Oracle, Grund

I 2 Code wie dieser

Select ID, SUM(Column1) AS Sum1 
from table1 

Select ID, SUM(Column1) AS Sum2 
from table2 

AS Ergebnis tabelle1 haben

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

AS Ergebnis von Tabelle2

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

Ich möchte s wie das Ergebnis nach dem Beitritt dieser 2 Tabellen wie folgt, wie kann ich den Code wie unten gezeigt?

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

Vielen Dank

+0

Ihre ersten Anfragen zurückkehren ein Fehler, ich vermute eine Gruppenklausel fehlt im Beispiel, was hast du bisher probiert? – mcha

Antwort

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

beachte hier, dass UNION ALL statt UNION verwendet wird, so dass Sie

duplizierten Ergebnisse zeigen, können
0

Sie können die beiden Unterabfragen zusammen FULL JOIN (nach einer GROUP BY zu jeder Zugabe), und verwenden Sie COALESCE() den richtigen Wert zurück:

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 oder FULL OUTER JOIN Gibt Datensätze von jeder Seite des Joins zurück, unabhängig davon, ob sie beitreten oder nicht. COALESCE() gibt den ersten Nicht-NULL-Wert aus der Liste der Parameter zurück, die Sie angeben.

Alternativ könnten Sie die beiden Sätze vor der Aggregation UNION:

SELECT ID, SUM(Column1) AS Sum 
FROM (Select ID, Column1 
     FROM table1 
     UNION ALL 
     Select ID, Column1 
     FROM table2 
    ) sub 
GROUP BY ID 
Verwandte Themen