2017-10-04 1 views
0

Ich habe 3 Tabellen:Wie erstelle ich eine rechte Auswahlfrage aus 3 Tabellen (SUM)?

+-----+---------+ 
|cl_id| name | 
+-----+---------+ 
| 1 | adaf | 
| 2 | rich | - clients 
| 3 | call | 
| 4 | alen | 
| 5 | courney | 
| 6 | warren | 
+-----+---------+ 

+-----+---------+ 
|cl_id| data | 
+-----+---------+ 
| 1 |  13 | 
| 2 | 1000 | - table1 
| 5 |  0 | 
| 6 |  0 | 
+-----+---------+ 

+-----+---------+ 
|cl_id| data | 
+-----+---------+ 
| 2 | -355 | - table2 
| 3 | 35  | 
| 3 | 10  | 
| 5 |  46 | 
| 5 |  50 | 
| 5 |  10 | 
+-----+---------+ 

Und ich habe diese drei Tabellen zu kombinieren, so sollte das Ergebnis sein:

+-----+---------+--------+---------+ 
|cl_id| name |data_tb1|data_tb2 | 
+-----+---------+--------+---------+ 
| 1 | adaf | 13 |  0 | 
| 2 | rich | 1000 | -355 | 
| 3 | call |  0 |  45 | 
| 4 | alen |  0 |  0 | 
| 5 | courney|  0 |  106 | 
| 6 | warren |  0 |  0 | 
+-----+---------+--------+---------+ 

Es sollte Ausgang alle Kunden und ihre SUM(data) aus Tabelle1 und Tabelle2. Kunden gehen eins-zu-mehr.

Vielen Dank im Voraus

+0

Ich entfernte die inkompatiblen Datenbank-Tags. Bitte markieren Sie nur die von Ihnen verwendete Datenbank. –

+0

@GordonLinoff done – ex1t3

+1

Das sieht aus wie eine grundlegende SUMME und links verbindet sich mit mir. –

Antwort

4

mit Simply LEFT JOIN und GROUP BY

SELECT c.cl_id, 
     c.name, 
     COALESCE(SUM(t1.data), 0) AS data_tb1, 
     COALESCE(SUM(t2.data), 0) AS data_tb2 
FROM clients c 
    LEFT JOIN table1 t1 ON c.cl_id = t1.cl_id 
    LEFT JOIN table2 t2 ON c.cl_id = t2.cl_id 
GROUP BY c.cl_id, 
     c.name 
ORDER BY c.cl_id; 
+0

danke für Ihre Antwort, ich werde es versuchen – ex1t3

+0

Warum verwenden Sie 'COALESCE'? Kann ich nicht einfach einfach' (SUM()) als smth' verwenden ? – ex1t3

+0

@ ex1t3 weil die 'SUM' von' NULL '' NULL' zurückgibt, so ersetzt es 'NULL' durch 0, wie Sie in der gewünschten Ausgabe vorgeschlagen haben –

0

Wenn Sie SQL Server dann einfach Gebrauch verwenden Left Join wie folgt:

SELECT C.cl_id, 
     C.name, 
     SUM(ISNULL(T.data, 0)) data_tb1, 
     SUM(ISNULL(T1.data, 0)) data_tb2 
FROM 
(
    SELECT * 
    FROM clients 
) C 
LEFT JOIN table1 T ON T.cl_id = C.cl_id 
LEFT JOIN table2 T1 ON T1.cl_id = C.cl_id 
GROUP BY C.cl_id, 
     C.name 
ORDER BY C.cl_id; 

gewünschte Ausgabe:

+-----+---------+--------+---------+ 
|cl_id| name |data_tb1|data_tb2 | 
+-----+---------+--------+---------+ 
| 1 | adaf | 13 |  0 | 
| 2 | rich | 1000 | -355 | 
| 3 | call |  0 |  45 | 
| 4 | alen |  0 |  0 | 
| 5 | courney|  0 |  106 | 
| 6 | warren |  0 |  0 | 
+-----+---------+--------+---------+ 
Verwandte Themen