2017-10-04 47 views
0

我有3個表:如何從3個表格(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 | 
+-----+---------+ 

我要這三個表組合,所以結果應該是:

+-----+---------+--------+---------+ 
|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 | 
+-----+---------+--------+---------+ 

它應該輸出所有的客戶和他們的SUM(data)從表1和表2。客戶變得越來越多。

在此先感謝

+0

我刪除了不兼容的數據庫標記。請僅使用您正在使用的數據庫進行標記。 –

+0

@GordonLinoff完成 – ex1t3

+1

這看起來像一個基本的SUM,並留給我加入。 –

回答

4

只需用LEFT JOINGROUP 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

感謝您的答案,我會嘗試 – ex1t3

+0

爲什麼你使用'COALESCE'?我不能只是簡單地使用'(SUM())作爲smth' ? – ex1t3

+0

@ex1t3是因爲'NULL'的'SUM'返回NULL,所以它在你想要的輸出中用'0'代替'NULL' –

0

如果您正在使用SQL Server那麼簡單使用Left Join如下:

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; 

所需的輸出:

+-----+---------+--------+---------+ 
|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 | 
+-----+---------+--------+---------+