我想在下面的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;构造。
有关如何解决此问题的任何想法?
答案 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中相当有限。