请参阅以下第1编辑从@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>
Get me this;
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!对于没有子类型的类型,计数是正确的。子类型计数是正确的。我已经试过各种但我没有在任何地方得到:(
任何帮助将不胜感激!:)
1日编辑
在从@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的满?!
第二编辑/凌乱的解决方案
,所以我想这是一个有点混乱的解决方案,但它的工程!
以下输出代码;
<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)
我敢肯定,有可能是一个更清洁的方式来做到这一点,如果有人知道它我打开的建议,但现在 - 这是工作:)
感谢您的帮助,我从来没有听说过WITH ROLLUP - 所以我会研究它。我尝试了WITH ROLLUP,但我得到了一个错误 - “错误执行数据库查询。错误的使用CUBE/ROLLUP和ORDER BY”但我发现如果我删除了ORDER BY的东西,它的工作原理 - 计数都很好:) – luke
ahhhh ...从该链接到文档; '使用ROLLUP时,不能使用ORDER BY子句对结果进行排序。换句话说,ROLLUP和ORDER BY是互斥的。 ' – luke
对不起,我错了:(计数是不正确的 - 我越来越; ASSOCIATE(15) 全部(108) - 所有者(108) - 运营商(10) - 制造商(4) - 系统供应商(4) - 调查公司(4) 政府(5) 科学(4) AFFILIATED(2) 杂项(3) – luke