2017-10-04 4 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 | 
+-----+---------+ 

を、結果がでなければなりませんので、私は、これらの3つのテーブルを結合する必要があります。

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

それはすべき出力をTABLE1とtable2のからのすべてのクライアントと彼らSUM(data)。クライアントは1対多に行きます。あなたは以下のようにSQL Server、単純な使用Left Joinを使用している場合は、事前に

おかげで

+0

互換性のないデータベースタグを削除しました。使用しているデータベースのみにタグを付けてください。 –

+0

@ GordonLinoff done – ex1t3

+1

これは基本的なSUMのように見えて、私に残っています。 –

答えて

4

単にLEFT JOIN

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())as smth' ? – ex1t3

+0

@ ex1t3 'SUM'が' NULL'を返すと 'NULL'が返されるので、' NULL'を0に置き換えます。 –

0

GROUP BYを使用して:

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 | 
+-----+---------+--------+---------+ 
関連する問題