在@Gordon Linoff 的回答之后,请参阅下面的第一次编辑
有关第二个编辑/混乱的解决方案,请参见底部
原始问题
我有 3 张桌子;
tblOrganisations
tblOrganisationTypes
tblOrganisationSubTypes
一个组织可以有一个类型,有些类型可以有一个子类型
我正在尝试获取类型和子类型的列表和计数,但我遇到了类型具有子类型的计数问题。
以下查询和代码;
<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>
给我这个;
AFFILIATED (2)
ASSOCIATE (15)
FULL (10)
-- operator (10)
-- manufacturer (4)
-- owner (108)
-- survey company (4)
-- supplier (4)
GOVERNMENT (5)
MISCELLANEOUS (3)
SCIENCE (4)
但是你看,全数 - 10 - 是错误的。应该是130!对于没有 SubType 的类型,计数是正确的。SubTypes 计数是正确的。我已经尝试了各种方法,但我无处可去:(
任何帮助将不胜感激!:)
第一次编辑
在@Gordon Linoff 的帮助下,添加 WITH ROLLUP,删除 ORDER BY,并使用以下代码;
<CFOUTPUT QUERY="RetrieveAllOrganisationTypes" GROUP="OrganisationType">
#OrganisationType# (#TypeCount#) #SubTypeCount#<BR>
<CFIF OrganisationSubType IS NOT ""><CFOUTPUT GROUP="OrganisationSubType">-- #OrganisationSubType# (#TypeCount#) #SubTypeCount#<BR></CFOUTPUT></CFIF>
</CFOUTPUT>
我现在明白了;
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
所以你看我得到了 130,但是我如何得到 130 的 FULL?!
第二次编辑/混乱的解决方案
所以我想这是一个有点混乱的解决方案,但它有效!
以下输出代码;
<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>
给我;
AFFILIATED (2)
ASSOCIATE (15)
FULL (130)
--operator (10)
--manufacturer (4)
--owner (108)
--survey company (4)
--supplier (4)
GOVERNMENT (5)
MISCELLANEOUS (3)
SCIENCE (4)
我确信可能有一种更清洁的方法可以做到这一点,如果有人知道,我愿意接受建议,但现在 - 这是有效的:)