我試圖創建一個交叉,但我需要一個類型的查詢,通過cia_ensures如何在一組總和中顯示0?
我的表重複每個policy_business_unit組:
|policies|
|id| |client| |policy_business_unit_id| |cia_ensure_id| |state|
1 MATT 1 1 0
2 STEVE 1 2 1
3 BILL 1 3 2
4 LARRY 1 4 0
|policy_business_units|
|id| |name| |comercial_area_id|
1 LIFE 1
|comercial_areas|
|id| |name|
1 BANK
|cia_ensures|
|id| |name|
1 SPRINT
2 APPLE
3 PEPSI
4 ORANGE
5 BT
這裏是信息:
http://sqlfiddle.com/#!2/37690/2
我試圖使用所有cia_ensures顯示計算結果:
SELECT ce.name AS CIAS, pb.name AS UNIT,
SUM(CASE WHEN p.state =0 THEN 1 ELSE 0 END) AS ACTIVES,
SUM(CASE WHEN p.state =1 THEN 1 ELSE 0 END) AS INACTIVES,
SUM(CASE WHEN p.state =2 THEN 1 ELSE 0 END) AS OTHERS
From policies p
INNER JOIN policy_business_units pb ON pb.id = p.policy_business_unit_id
INNER JOIN comercial_areas ca ON ca.id = pb.comercial_area_id
INNER JOIN cia_ensures ce ON ce.id = p.cia_ensure_id
WHERE policy_business_unit_id IN (1)
GROUP BY cia_ensure_id
我得到這個結果:
UNIT CIAS COMERCIAL_AREAS STATE_0 STATE_1 STATUS_2
LIFE SPRINT BANK 1 0 0
LIFE APPLE BANK 0 1 0
LIFE PEPSI BANK 0 0 1
LIFE ORANGE BANK 1 0 0
這裏是我的問題: 我想告訴所有cia_ensure_id,如果這沒有關係顯示0
我該怎麼做纔能有這樣的結果?
UNIT CIAS COMERCIAL_AREAS STATE_0 STATE_1 STATUS_2
LIFE SPRINT BANK 1 0 0
LIFE APPLE BANK 0 1 0
LIFE PEPSI BANK 0 0 1
LIFE ORANGE BANK 1 0 0
LIFE BT BANK 0 0 0
我試圖
SELECT ce.name AS CIAS, pb.name AS UNIT,
SUM(CASE WHEN p.state =0 THEN 1 ELSE 0 END) AS ACTIVES,
SUM(CASE WHEN p.state =1 THEN 1 ELSE 0 END) AS INACTIVES,
SUM(CASE WHEN p.state =2 THEN 1 ELSE 0 END) AS OTHERS
From policies p
INNER JOIN policy_business_units pb ON pb.id = p.policy_business_unit_id
INNER JOIN comercial_areas ca ON ca.id = pb.comercial_area_id
INNER JOIN cia_ensures ce ON ce.id = p.cia_ensure_id
WHERE policy_business_unit_id IN (1) AND cia_ensured_id IN (1,2,3,4,5)
GROUP BY cia_ensure_id
所有形式的幫助將被接受。
請給我所有的幫助。
謝謝。
將連接更改爲cia_ensures上的外連接。 INNER連接必須在每個表中都有記錄,否則會被排除。外部連接(左側,右側或全部)將顯示左側或右側或兩個表中的所有記錄。除非在where子句中過濾掉。 – xQbert
在LEFT JOIN上閱讀,我想這就是你要找的。 – RobP
好吧,我改變了「外部連接cia_ensures ce在ce.id = p.cia_ensure_id」,但得到錯誤 –