查询的查询中的 CASE

Sin*_*Kjr 2 sql sql-server coldfusion case qoq

在 ColdFusion 中,在查询 MSSQL 数据库并使用QueryAddRow函数添加几行后,我需要通过执行查询的查询来重新排序查询。我需要的顺序要求我在 ORDER BY 子句中使用 CASE 表达式,如下所示:

<cfquery name="newquery" dbtype="query">
SELECT * FROM query
ORDER BY 
  CASE
    WHEN var LIKE 'All' THEN 'Zz'
    WHEN var LIKE '9%' THEN '0'
    ELSE var 
  END, year
</cfquery>
Run Code Online (Sandbox Code Playgroud)

这会返回一个错误:Error Executing Database Query. Caught an exception, type = Database。我还尝试使用QueryExecute

如果我直接查询数据库,查询工作得很好,所以当我尝试执行查询的查询时,我只会收到错误。如果我删除 CASE 表达式并只执行(...) ORDER BY var, year查询的查询也可以正常工作,所以在我看来,CASE 在查询的查询中是不可能的。这是正确的吗,或者我应该能够以某种方式使用 CASE 吗?

这是我需要重新排序的结构(添加三行后)。显然我已经删除了与当前问题无关的所有列。

year | var 
2001 | 9-12
2002 | 9-12
2003 | 9-12
2001 | 12+
2002 | 12+
2003 | 12+
2001 | All
2002 | All
2003 | All
2000 | 9-12
2000 | 12+
2000 | All
Run Code Online (Sandbox Code Playgroud)

如您所见,我使用 CASE 按自定义顺序对 var 列进行排序。我愿意接受可能完全规避这个问题的建议。

如果有不清楚的地方,请告诉我。

Dan*_*cuk 5

查询的查询仅支持某些事物 - 案例构造似乎是它不支持的事物之一。

我的建议是使用QueryAddColumn向查询对象添加 sortBy 列。然后循环执行此查询并为此列分配适当的值。然后在 Q of Q 中按此列进行排序。

或者,您可以简单地执行您所说的操作,并将逻辑合并到原始数据库查询中。