【发布时间】:2018-01-16 13:06:38
【问题描述】:
在 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>
这会返回一个错误: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
如您所见,我正在使用 CASE 通过自定义排序对 var 列进行排序。我对可能完全绕过这个问题的建议持开放态度。
如果有什么不清楚的地方请告诉我。
【问题讨论】:
-
"可能完全规避问题的建议" 如果您有能力修改表结构,请将名为“sortOrder”的列添加到包含“var”值和 ORDER BY SortOrder 的源表中.这将消除每次使用该列时对 CASE 的需要。另外,请考虑不要使用“var”作为列名。由于它是 CFML 中的保留字,因此在某些情况下可能会导致问题。
-
不用担心,“var”只是我为示例选择的通用变量名称,而不是我在实践中使用的名称。看起来所有的建议和答案都指向制作一个排序列,所以这可能就是我要做的。
-
手动添加的三行是什么?询问原因可能有更简单的选择...
标签: sql sql-server coldfusion case qoq