你的第一個
INNER JOIN
s到一個
RIGHT JOIN
替換/
LEFT JOIN
:
SELECT normesTypesDemande.choix AS nomTypeDemande,
normesLois.choix AS nomLoi,
COUNT(*) as nbDemandes
FROM ((gestionDemandes.typeNormes
RIGHT JOIN gestionDemandes.normesLois
ON typeNormes.loi = normesLois.id)
LEFT JOIN gestionDemandes.normesTypesDemande
ON typeNormes.typeDemande = normesTypesDemande.id)
LEFT JOIN gestionDemandes.demandes
ON typeNormes.demande = demandes.id
GROUP BY normesTypesDemande.choix, normesLois.choix
ORDER BY normesTypesDemande.choix
因爲那INNER JOIN
和沒有相應的行數爲Comité - SAE
例如,INNER JOIN
將過濾SAE
行。
它更改爲
RIGHT JOIN
將確保沒有從
normesLois
數據將被排除在外,你應該有你的
0
計數。
更新:
哦,不是最優雅的,但這裏是解決方案:
SELECT nomTypeDemande
, choix
, sum(nbDemandes) AS nbDemandes
FROM (
SELECT r.nomTypeDemande
, nl.choix
, CASE
WHEN r.nomLoi = nl.choix
THEN sum(r.nbDemandes)
ELSE 0
END AS nbDemandes
FROM (
SELECT normesTypesDemande.choix AS nomTypeDemande
, normesLois.choix AS nomLoi
, COUNT(typeNormes.id) AS nbDemandes
FROM normesLois
FULL JOIN typeNormes
ON typeNormes.loi = normesLois.id
FULL JOIN normesTypesDemande
ON typeNormes.typeDemande = normesTypesDemande.id
GROUP BY normesTypesDemande.choix
, normesLois.choix
) r
CROSS JOIN normesLois nl
GROUP BY r.nomTypeDemande
, nl.choix
, r.nomLoi
) r
GROUP BY nomTypeDemande
, choix
ORDER BY nomTypeDemande
, choix
喜先生,我已經試過這一點,但不是差在所有... :( – Patix80
@ Patix80你現在可以重試? –
是的,我再次嘗試,但同樣的結果......有沒有(0),例如? – Patix80