如何在查询查询中使用函数?
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#">
我想在下面的 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#">