Coldfusion 从查询的查询中选择行范围

Coldfusion 从查询的查询中选择行范围,coldfusion,cfquery,Coldfusion,Cfquery,如何使用查询查询选择特定范围的行 e、 g 挑选* 从上一个查询 其中行数>=12 这类事情…在CF中本机执行此操作不受支持,因此您必须在原始记录集中添加一列来为您进行计数 SELECT ..., row_num AS Counter 行数可能因DBMS而异 这是一个棘手的问题,但你的问题引起了我的兴趣。我想我可能有个解决办法 我编写了一个函数,删除所需行之前的所有内容,然后删除所需行之后的所有内容 函数rowrange()接受3个参数。 1.您正在使用的queryname。 2.您想要的

如何使用查询查询选择特定范围的行

e、 g


挑选*
从上一个查询
其中行数>=12

这类事情…

在CF中本机执行此操作不受支持,因此您必须在原始记录集中添加一列来为您进行计数

SELECT ..., row_num AS Counter

行数可能因DBMS而异

这是一个棘手的问题,但你的问题引起了我的兴趣。我想我可能有个解决办法

我编写了一个函数,删除所需行之前的所有内容,然后删除所需行之后的所有内容

函数rowrange()接受3个参数。 1.您正在使用的queryname。 2.您想要的起始行 3.所需的行数

更新:我的朋友John Whish指出,我实际上不需要做循环来让它工作。删除循环使其更具可伸缩性

<cfquery name="myQuery">
 SELECT *
 FROM   previous_query
 WHERE  row_numer >= 12
</cfquery>


<cfset  rowRange(myQuery,7,4)>
<cfdump var="#myQuery#">

<cffunction name="rowRange" hint="return a range of rows from a given query">
    <cfargument name="qObj" type="query" required="true">
    <cfargument name="start" type="numeric" required="true" default="1" hint="The number of the first row to include">
    <cfargument name="range" type="numeric" required="true" default="1" hint="The number of rows">


    <cfset var i = arguments.start+arguments.range-1>
    <cfset arguments.qObj.removeRows(i,arguments.qObj.recordcount-i)>
    <cfset arguments.qObj.removeRows(0,arguments.start-1)>

    <cfreturn arguments.qObj>
</cffunction>

挑选*
从上一个查询
其中行数>=12

你不能选择TOP 20吗??coldfusions查询不支持TOP,另外,如果我想从记录集的任何部分检索20行,这是一个非常好的解决方案,我可以在多个位置实现。谢谢更新了代码:我的朋友John Whish指出,我实际上不需要做循环来让它工作。删除循环使其更具可伸缩性。今年我遇到了John whish,他担任CF.objective()。他告诉我应该将客户端迁移到SQL server上。我希望我可以,我将把这个函数添加到我的ms Access黑客库中。谢谢。哇,你就是那个还在使用Access的人;)不用担心,我们公司也是从那开始的。我本来会这么做的,但Ms Access不支持任何行数类型的功能。我通过使用queryAddColumn并在执行QoQ之前手动添加一个rownumber列来模拟它。这不完全正确,您可以轻松地操作可能是正确的查询,但是正如我在测试中发现的那样,在具有大型数据集的access数据库上运行子查询变得指数效率低下。。在CF中手动操作更快
<cfquery name="myQuery">
 SELECT *
 FROM   previous_query
 WHERE  row_numer >= 12
</cfquery>


<cfset  rowRange(myQuery,7,4)>
<cfdump var="#myQuery#">

<cffunction name="rowRange" hint="return a range of rows from a given query">
    <cfargument name="qObj" type="query" required="true">
    <cfargument name="start" type="numeric" required="true" default="1" hint="The number of the first row to include">
    <cfargument name="range" type="numeric" required="true" default="1" hint="The number of rows">


    <cfset var i = arguments.start+arguments.range-1>
    <cfset arguments.qObj.removeRows(i,arguments.qObj.recordcount-i)>
    <cfset arguments.qObj.removeRows(0,arguments.start-1)>

    <cfreturn arguments.qObj>
</cffunction>