如何使用CFQUERY从Table2中获取Table1中每个项目的一个结果?

时间:2015-01-03 07:27:29

标签: coldfusion cfquery

我正在尝试进行简单的查询:

 <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中创建一个循环,但还没有成功。我知道这一定很简单,但我无法弄清楚。我很感激任何建议

1 个答案:

答案 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>