如何在查询查询中使用函数?

时间:2015-06-25 04:32:53

标签: coldfusion cfquery

我想在下面的QoQ中实现类似于IIF的东西。但是它给了我一个错误。要么我做错了,要么就是不可能。希望它是前者。

<cfquery dbtype="query">
select 
  lastname + IIF(Len(firstname) > 0, DE(", " & firstname), DE("")) as fullname 
from myquery
</cfquery>

我收到此错误:

  

查询查询语法错误。
  遇到&#34;(。错误的选择语句,期待&#39; FROM&#39;,但遇到&#39;(&#39;相反,选择语句应该有&#39; FROM&#39;构造。

有关如何解决此问题的任何想法?

3 个答案:

答案 0 :(得分:7)

查询查询仅支持一小组不包含case语句的SQL功能。但是,您可以在查询查询中使用联合来实现您的目标。像这样:

<cfset q = QueryNew("firstname,lastname")>

<cfset queryAddRow(q)>
<cfset querySetCell(q, "firstname", "")>
<cfset querySetCell(q, "lastname", "Smith")>

<cfset queryAddRow(q)>
<cfset querySetCell(q, "firstname", "Joe")>
<cfset querySetCell(q, "lastname", "Bloggs")>


<cfquery name="r" dbtype="query">
    SELECT lastname + ', ' + firstname as fullname
    FROM q
    WHERE firstname <> ''

    UNION

    SELECT lastname as fullname
    FROM q
    WHERE firstname = ''

    ORDER BY fullname
</cfquery>

<cfdump var="#r#">

答案 1 :(得分:1)

首先,无论是使用普通查询还是查询查询,都不能将ColdFusion函数与SQL一起使用,反之亦然。

我想指出的其他事情(正如@snackboy已经提到的)是每当你使用ColdFusion函数生成动态查询时,你需要把它放在井号(#)中。

您尝试实现的目标是使用CASE WHEN完成的。但是查询查询不支持。 因此,您需要在实际查询中执行CASE WHEN

答案 2 :(得分:0)

但作为解决方法,您可以执行以下操作:

<cfquery dbtype="query" name="myQueryResult">
    select lastname, firstname, lastname as fullname from myquery
</cfquery>

<cfoutput query="myQueryResult">
    <cfif len(firstname) gt 0>
         <cfset myQueryResult.fullname = lastname & ', ' & firstname>
    </cfif>
</cfoutput>

对不起,这不能直接回答这个问题。我可能有时间回到这个问题。我知道查询的查询在CF中相当有限。