0

所以我必须根据其他一些列值输出查询列值。为此,我使用 cfloop 检查查询列中的每个值,然后设置值。我的代码如下所示:

<cfloop query="myQuery">
    <cfif status EQ "ABC" OR status EQ "DEF">
        <cfif trim(exitStatus) EQ ''>
            <cfset col8val = #col8val#>
        <cfelse>
            <cfset col8val = #col8val# A>
        </cfif>
    </cfif>
</cfloop>

所以我想知道我应该用什么来将我的结果存储在一个地方,这样我就不必循环了,我只想在上面的 cfloop 之后转储我的结果集。我不能使用数组或结构,因为两者都需要额外的循环来获得结果。我也尝试在 SQL 中执行此操作,但我无法合并来自两个不同列的两个 CASE 语句。如果有人可以帮助解决这个问题,请告诉我。

4

1 回答 1

2

你可以从两个不同的列做一个案例陈述,但也许你只是不知道怎么做。我会进一步研究您使用的任何 SQL 风格,看看它是如何完成的。在 SQL Server 中,您可以执行以下操作:

SELECT CASE WHEN status IN ('ABC', 'DEF') AND COALESCE(exitStatus,'') = ''THEN col8val 
            ELSE col8val + 'A' 
       END AS TheNewValue
FROM   TableName
WHERE  ....

另一种选择是物理编辑查询对象,Ben 的这篇文章解释了如何做到这一点:问 Ben:更新现有 ColdFusion 查询对象中的列

但是,您的确切问题:

所以我想知道我应该用什么来将我的结果存储在一个地方,这样我就不必循环了,我只想在上面的 cfloop 之后转储我的结果集。我不能使用数组或结构,因为两者都需要额外的循环来获得结果。

我不完全理解你的问题。您想“将结果存储在一个地方”,但不想使用数组或结构。好吧,如果你不能使用数组或结构,你认为你怎么能存储非原始数据呢?也不清楚您打算如何使用这些数据。其他人编写的一些函数可以非常有效地将查询转换为数组或结构或列表等。但是如果您需要检查和更改任何数据,您唯一的选择是编写一个循环,使用某人的函数并对其进行修改以执行更改数据或更改 SQL 所需的检查。您可能可以通过 QoQ 获得创意,但老实说,如果您正在研究它,您不妨在原始查询中进行。

于 2016-09-27T15:52:04.060 回答