【问题标题】:ColdFusion query output?ColdFusion 查询输出?
【发布时间】:2016-09-26 15:31:41
【问题描述】:

所以我必须根据其他一些列值输出查询列值。为此,我使用 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 语句。如果有人可以帮助解决这个问题,请告诉我。

【问题讨论】:

  • SELECT CASE WHEN status = 'ABC' OR status = 'DEF' AND (exitStatus = '' OR exitStatus IS NULL) THEN col8val ELSE col8val + 'A' 这样的东西应该可以在 SQL 中使用。另一个选项是更新查询本身。 bennadel.com/blog/…。在编写大量循环之前,我会先研究一下。
  • 一旦你弄清楚了案例结构,就可以为每个方法计时。虽然使用数据库应用您的逻辑消除了对循环的要求,但不能保证它会更有效。
  • @Leeish 为什么不直接回答?我在几乎是答案的问题上看到了很多 cmets。
  • 因为这不是他实际问题的下水道。
  • 下水道?我认为评论/答案非常好;-) 说真的,很高兴看到人们想要回答实际问题(尽可能),而不是仅仅发布“答案”。

标签: sql coldfusion case cfloop


【解决方案1】:

您可以从两个不同的列执行 case 语句,但也许您只是不知道如何操作。我会进一步研究您使用的任何 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 的这篇文章解释了如何做到这一点:Ask Ben: Updating Columns In An Existing ColdFusion Query Object

但是您的确切问题:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多