Siehe unten für 1. bearbeiten im Anschluss an die Antwort von @Gordon LinoffTypen abrufen Artikel, deren Subtyp, und zählt dieser Typen und Subtypen
Boden Siehe 2. edit/unordentlich Lösung
Original Frage
Ich habe 3 Tabellen;
tblOrganisations
tblOrganisationTypes
tblOrganisationSubTypes
Eine Organisation kann einen Typ haben, und einige Typen eine Unterart
Ich versuche, eine Liste und Anzahl der Typen und Subtypen zu bekommen, aber ich habe Probleme mit der Zählung haben kann, wo Ein Typ hat einen Untertyp.
Die folgende Abfrage und Code;
<CFQUERY NAME="RetrieveAllOrganisationTypes" DATASOURCE="#strDev#">
SELECT tblOrganisations.tblOrganisationTypes_ReferenceID , COUNT(tblOrganisations.tblOrganisationTypes_ReferenceID) AS TypeCount , COUNT(tblOrganisations.tblOrganisationSubTypes_ReferenceID) AS SubTypeCount , tblOrganisationTypes.OrganisationType , tblOrganisationSubTypes.OrganisationSubType
FROM ((tblOrganisations
LEFT JOIN tblOrganisationTypes ON tblOrganisations.tblOrganisationTypes_ReferenceID = tblOrganisationTypes.ReferenceID)
LEFT JOIN tblOrganisationSubTypes ON tblOrganisations.tblOrganisationSubTypes_ReferenceID = tblOrganisationSubTypes.ReferenceID)
GROUP BY tblOrganisations.tblOrganisationTypes_ReferenceID , tblOrganisations.tblOrganisationSubTypes_ReferenceID
ORDER BY tblOrganisationTypes.OrganisationType , tblOrganisationSubTypes.OrganisationSubType
</CFQUERY>
<CFOUTPUT QUERY="RetrieveAllOrganisationTypes" GROUP="OrganisationType">
#OrganisationType# (#TypeCount#)<BR>
<CFIF OrganisationSubType IS NOT ""><CFOUTPUT GROUP="OrganisationSubType">-- #OrganisationSubType# (#SubTypeCount#)<BR></CFOUTPUT></CFIF>
</CFOUTPUT>
Ruft mich das;
AFFILIATED (2)
ASSOCIATE (15)
FULL (10)
-- operator (10)
-- manufacturer (4)
-- owner (108)
-- survey company (4)
-- supplier (4)
GOVERNMENT (5)
MISCELLANEOUS (3)
SCIENCE (4)
Aber sehen Sie, die volle Zahl - 10 - falsch ist. Es sollte 130 sein! Für Typen ohne SubType ist die Anzahl korrekt. Die Anzahl der SubTypes ist korrekt. Ich habe alle Arten versucht, aber ich bin nicht immer überall :(
Jede Hilfe wird sehr geschätzt! :)
1. bearbeiten
Nach der Hilfe von @Gordon Linoff und fügte hinzu, die WITH ROLLUP, Entfernen der ORDER BY und mit dem folgenden Code;
<CFOUTPUT QUERY="RetrieveAllOrganisationTypes" GROUP="OrganisationType">
#OrganisationType# (#TypeCount#) #SubTypeCount#<BR>
<CFIF OrganisationSubType IS NOT ""><CFOUTPUT GROUP="OrganisationSubType">-- #OrganisationSubType# (#TypeCount#) #SubTypeCount#<BR></CFOUTPUT></CFIF>
</CFOUTPUT>
Ich bekomme jetzt;
AFFILIATED (2) 2
ASSOCIATE (15) 15
FULL (10) 10
-- operator (10) 10
-- manufacturer (4) 4
-- owner (108) 108
-- survey company (4) 4
-- supplier (4) 4
-- (130) 130
GOVERNMENT (5) 5
MISCELLANEOUS (3) 3
SCIENCE (4) 4
(159) 159
Sie sehen also, ich bin die 130 bekommen, aber wie bekomme ich die 130 vom FULL ?!
2. edit/unordentlich Lösung
Also ich denke, das ist ein bisschen chaotisch Lösung, aber es funktioniert!
Der folgende Ausgabecode;
<CFOUTPUT QUERY="RetrieveAllOrganisationTypes" GROUP="OrganisationType">
<CFOUTPUT GROUP="OrganisationSubType">
<CFIF OrganisationSubType IS "" AND OrganisationType IS NOT "">#OrganisationType# (#TypeCount#)<BR></CFIF>
</CFOUTPUT>
<CFOUTPUT GROUP="OrganisationSubType">
<CFIF OrganisationSubType IS NOT "" AND OrganisationType IS NOT "">--#OrganisationSubType# (#SubTypeCount#)<BR></CFIF>
</CFOUTPUT>
</CFOUTPUT>
Gibt mir;
AFFILIATED (2)
ASSOCIATE (15)
FULL (130)
--operator (10)
--manufacturer (4)
--owner (108)
--survey company (4)
--supplier (4)
GOVERNMENT (5)
MISCELLANEOUS (3)
SCIENCE (4)
Ich bin sicher, es ist wahrscheinlich ein sauberer Weg, dies zu tun, und wenn jemand es weiß, ich bin offen für Vorschläge, aber jetzt - das funktioniert :)
danke für deine hilfe, ich hätte noch nie von WITH ROLLUP gehört - also werde ich mich darum kümmern. Ich habe versucht, die WITH ROLLUP, aber ich habe einen Fehler - "Fehler beim Ausführen Datenbankabfrage. Falsche Verwendung von CUBE/ROLLUP und ORDER BY" aber ich fand, wenn ich die ORDER BY Zeug entfernt, funktioniert es - die Zahlen sind alle gut :) – luke
ahhhh ... von diesem Link zur Dokumentation; 'Wenn Sie ROLLUP verwenden, können Sie die Ergebnisse auch nicht mit einer ORDER BY-Klausel sortieren. Mit anderen Worten, ROLLUP und ORDER BY schließen sich gegenseitig aus. " – luke
sorry ich war falsch :(die Zählung nicht korrekt ist - ich erhalte; ASSOCIATE (15) FULL (108) - Inhaber (108) - Operator (10) - Hersteller (4) - Systemanbieter (4) - Umfrage Unternehmen (4) REGIERUNG (5) SCIENCE (4) VERBUNDENEN (2) SONSTIGES (3) – luke