2016-12-17 8 views
0
table 1   table2 

    k2 id   k1 id 
    3 1   3 1 
    3 1   3 1 
    3 1   3 1 
    5 2   5 2 
    6 2   6 2 
    7 2   7 2 
    7 2   7 2 
    7 2   7 2 
        5 2 

Ausgang duplizieren ich brauche, ist:wenn Summe zwei Spalten in verschiedenen Tabellen die Summe Datensatz

id sum k1 sum k1 
1  9  9 
2  37  32 

Hier ist die Abfrage i verwendet:

select table1.id,sum(table1.k1),table2.id,sum(table2.k1) from table1,table2 
where table1.id= table2.id 

aber Ausgang ich nicht Recht haben

+0

Es gibt keine Spalte k1 in Tabelle1 – GurV

Antwort

1

Dies sollte den Trick:

SELECT 
    COALESCE(table1_result.id1, table2_result.id2) AS id 
    , table1_result.sum_k1 AS sum_k1 
    , table2_result.sum_k2 AS sum_k2 
FROM 
        (SELECT id AS id1, SUM(k1) AS sum_k1 FROM table1 GROUP BY id) AS table1_result 
    FULL OUTER JOIN (SELECT id AS id2, SUM(k2) AS sum_k2 FROM table2 GROUP BY id) AS table2_result 
    ON table1_result.id1 = table2_result.id2 

Die erste Unterabfrage in der FROM Klausel:

SELECT id AS id1, SUM(k1) AS sum_k1 FROM table1 GROUP BY id 

wird Ihnen ein Ergebnis

id1  sum_k1 
1  9 
2  37 

Und Ebenso wird die zweite Teilabfrage die Summe für die Tabelle geben 2.

id2  sum_k2 
1  9 
2  32 

Die äußere Abfrage entspricht den id Werte von den beiden Unterabfragen und zeigt die jeweiligen Summen aus Tabelle 1 und Tabelle 2 nebeneinander.

id  sum_k1  sum_k2 
1  9   9 
2  37   32 
0

Ich glaube, table1 hat id und k1 Spalte. So können Sie dies tun:

select coalesce(t1.id, t2.id) id, 
sum(t1.k1) sum_t1_k1, 
sum(t2.k1) sum_t2_k1 
from table1 t1 full outer join table2 t2 
t1.id = t2.id 
group by coalesce(t1.id, t2.id); 
2

Eine einfache Kombination von UNION und GROUP BY werden Sie gewünschtes Ergebnis. Hier gehts ..

SELECT id,max(SumK1) AS SumK1,max(SumK2) AS SumK2 FROM 
(
    SELECT ID, sum(k1) AS SumK1, NULL AS SumK2 FROM table1 GROUP BY id 
    UNION 
    SELECT ID, NULL AS SumK1, sum(k2) AS SumK2 FROM table2 GROUP BY id 
) T 
GROUP BY id 
Verwandte Themen