所以我有 3 個表:tableA、tableB、tableC,其結構如下
表A
| ID | 姓名 | 狀態 |
|---|---|---|
| 1 | 射線 | 醫學博士 |
| 2 | 山姆 | 洛杉磯 |
| 3 | 約翰 | 紐約 |
表B
| ID | 援助 | 數量 | 代碼 |
|---|---|---|---|
| 1 | 2 | 10 | 收費 |
| 2 | 2 | 20 | 收費 |
| 3 | 3 | 70 | 收費 |
表C
| ID | 援助 | 數量 | 代碼 |
|---|---|---|---|
| 1 | 2 | 50 | 收費 |
| 2 | 2 | 40 | 訂金 |
| 3 | 1 | 60 | 收費 |
我需要連接的輸出如下:
| 援助 | 數量 |
|---|---|
| 1 | 60 |
| 2 | 30 |
| 3 | 70 |
因此,這里它根據 tableA 中的 id 計算金額的總和。它檢查 tableB 的金額,如果不存在,則只檢查 tableC。這就是 id 2 在輸出中的數量為 30 的原因。
但實際發生的是兩個表的總和相加。所以我得到 120 的 id 2。我如何獲得所需的輸出?
所以我在這里嘗試了這個查詢
Select if( SUM(CASE WHEN B.code != 'DEPOSIT'
THEN B.amount
ELSE 0 END) > 0,
SUM(CASE WHEN B.code != 'DEPOSIT'
THEN B.amount
ELSE 0 END),
SUM(CASE WHEN C.code != 'DEPOSIT'
THEN C.amount
ELSE 0 END)) as total
FROM tableA as A
left join tableB AS B on A.id=B.a_id
LEFT JOIN tableC AS C on A.id=C.a_id
GROUP BY A.id
uj5u.com熱心網友回復:
測驗這個:
SELECT id, CASE WHEN b.amount
THEN b.amount
ELSE c.amount
END amount
FROM tableA a
LEFT JOIN ( SELECT a_id id,
SUM( CASE WHEN code != 'DEPOSIT'
THEN amount
ELSE 0
END ) amount
FROM tableB
GROUP BY id ) b USING (id)
LEFT JOIN ( SELECT a_id id,
SUM( CASE WHEN code != 'DEPOSIT'
THEN amount
ELSE 0
END ) amount
FROM tableC
GROUP BY id ) c USING (id)
uj5u.com熱心網友回復:
您可以嘗試這樣的解決方案
Select A.id, SUM(if(B.amount is NOT NULL,B.amount, C.amount)) as total
FROM tableA as A
LEFT JOIN tableB AS B on A.id=B.a_id and B.code != 'DEPOSIT'
LEFT JOIN tableC AS C on A.id=C.a_id and C.code != 'DEPOSIT'
GROUP BY A.id
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/348339.html
