Perdona la pochezza di informazioni. Ho risposto di getto, avendo a mente la
precedente discussione, in cui abbiamo impostato la query.
In effetti, per la parte che hai suggerito tu correttamente, è uguale. Io ero col pensiero all'alias [Espletate] che, come puoi notare, ha delle condizioni nella clausola WHERE. Ho fatto confusione.
Sono contento che tu sia riuscito a risolvere, ma ho solo un paio di dubbi che ti espongo:
1) così facendo obblighi il motore di DB ad effettuare due volte le stesse ricerche. Fintanto che non sono impegnative, la differenza non la noti, ma quando cominci ad avere parecchi record secondo me inizia a pesare. Considera inoltre l'eventualità di modificare i parametri di ricerca dei record. Dovrai farlo in due parti distinte della query, con la possibile esposizione ad errori di copia/incolla o riscrittura, vista anche la (mia opinione personale) scarsa leggibilità delle istruzioni.
2) hai rimosso l'IF, il che ti espone nuovamente alla divisione per zero ed ai relativi errori. Ora per reinserirlo dovresti effettuare una terza volta il Count sulle Ricevute (la condizione Espletate = 0 come già ti suggerivo nell'altra discussione è inutile quindi almeno quella te la potresti risparmiare).
Quando mi ritrovo a dover gestire situazioni come la tua, io preferisco appoggiarmi a queste tabelle temporanee, così da avere anche un punto intermedio per verificare i record restituiti e facilitarmi la vita con il "debug".
Imposterei la cosa così:
codice:
CREATE TEMPORARY TABLE Espletate
(
SELECT TblRichieste.IdCircoscrizione, COUNT(TblRichieste.IdRichiesta) As Espletate
FROM TblRichieste
WHERE TblRichieste.Completata = TRUE
GROUP BY TblRichieste.IdCircoscrizione
)
SELECT
TblCircoscrizioni.ID,
TblCircoscrizioni.Circoscrizione,
COUNT(TblRichieste.IdRichiesta) AS Ricevute,
E.Espletate,
IF(COUNT(TblRichieste.IdRichiesta)=0,0,ROUND(E.Espletate/COUNT(TblRichieste.IdRichiesta)*100,2)) AS Percentuale
FROM TblCircoscrizioni
LEFT JOIN TblRichieste ON TblCircoscrizioni.ID = TblRichieste.IdCircoscrizione
LEFT JOIN Espletate as E On E.IdCircoscrizione = TblRichieste.IdCircoscrizione
GROUP BY TblCircoscrizioni.ID, TblCircoscrizioni.Circoscrizione
Ore, se volessi di nuovo reinserire il controllo delle date, sarà sufficiente farlo nella tabella temporanea perché le modifiche si vedano in entrambe le colonne. Se poi quel che estrapoli dalla tabella temporanea, ti può tornare utile in altre query, ti suggerisco di valutare l'utilizzo di una vista.
P.S. Come già accennavo, non ho la possibilità di fare dei test, ma l'impostazione delle query dovrebbe essere corretta.:)