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

How to use functions in Queries on Queries?

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

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

我收到这个错误:

Query Of Queries syntax error.
Encountered "(. Incorrect Select Statement, Expecting a 'FROM', but encountered '(' instead, A select statement should have a 'FROM' construct.

关于如何解决这个问题有什么想法吗?

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

<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 中相当有限。

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

我想指出的另一件事(正如@snackboy 已经提到的那样)是每当您使用 ColdFusion 函数生成动态查询时,您需要将其放在井号中(#)。

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

Query of Queries 仅支持一小部分 SQL 功能,不包括 case 语句。但是,您可以在查询查询中使用联合来实现您所追求的目标。像这样:

<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#">