我正在尝试进行简单的查询:
<CFQUERY Name=GetResults Database=Rent> SELECT * FROM Units, Tenants
WHERE Units.UnitID=Tenants.UnitID</CFQUERY>
<CFOUTPUT Query=GetRetults>
#UnitName# #TenantID#<BR>
</CFOUTPUT>
这就是结果的样子
101 57
101 199
101 204
101 590
102 85
102 97
103 44
我只想为TenantID的每个单元获得一个结果,我希望它是最高的租户ID。换句话说,我希望结果看起来像:
101 590
102 97
103 44
我很茫然。我已经尝试在Query中创建一个循环,但还没有成功。我知道这一定很简单,但我无法弄清楚。我很感激任何建议
答案 0 :(得分:5)
将查询结果分组到数据库中并使用聚合函数。这样的事情应该有效:
<CFQUERY Name="GetResults" Database="Rent">
SELECT u.unitID, u.unitName, max( t.tenantID ) as maxTenantID
FROM Units u
INNER JOIN Tenants t ON u.UnitID = t.UnitID
GROUP BY u.unitID, u.unitName
</CFQUERY>
如果更改SQL不是一个选项,则一旦数据库将完整结果集返回给ColdFusion,您就可以使用查询查询来执行相同的操作。注意,下面的SQL在内存中运行,而不是在数据库上运行。
<CFQUERY Name="groupedResults" dbtype="query">
SELECT unitID, unitName, max( tenantID ) as maxTenantID
FROM GetResults
GROUP BY unitID, unitName
</CFQUERY>
最后,cfoutput标记还有一个group属性,您可以使用它。内部cfoutput对每个租户运行一次。 (我认为这是最丑陋的方法)
<CFOUTPUT Query="GetRetults" group="unitID">
#UnitName#
<!--- Reset every time --->
<cfset maxTenantID = 0>
<cfoutput>
<cfset maxTenantID = max( maxTenantID, TenantID )>
</cfoutput>
#maxTenantID#<BR>
</CFOUTPUT>