我的理解是,使用QoQ时,nulls last是不可能的。无论我是按升序还是降序对行进行排序,如何使coldfusion在最后对空值进行排序?
我试过在查询的SELECT和ORDER部分使用case,但看起来CF不喜欢它(在railo上运行)
发布于 2013-04-08 05:17:30
可能有更好的选项,但一个简单的技巧是添加一个表示排序优先级的列。为具有非空值的记录分配比空值更高的优先级。然后,只需先按优先级值排序,然后再按所需的任何其他列排序。由于空值具有较低的优先级编号,因此它们将始终排在最后。
<!--- 1 - non-null values 2 - null values --->
SELECT 1 AS SortOrder, SomeColumn
FROM theQuery
WHERE SomeColumn IS NOT NULL
UNION ALL
SELECT 2 AS SortOrder, SomeColumn
FROM theQuery
WHERE SomeColumn IS NULL
ORDER BY SortOrder, SomeColumn ASC(值得注意的是,您可以使用order by而不是union在数据库查询中执行类似的操作。)
发布于 2013-04-08 05:21:09
ColdFusion和Railo上的QoQ都有非常有限的SQL词汇,并且没有处理如何整理空值的内容。因此,正如@Leigh所建议的,添加另一列--不带任何空值--表示您想要的排序。
或者,如果可能的话,最好在数据库中处理所有这些内容。显然,这并不总是可能的(因为您查询的记录集可能一开始就不是来自DB ;-)
发布于 2013-04-08 08:13:43
...there是另一种方法,但它依赖于值为NULL而不是空的''。我在这里从内存开始,但本质上就是这样,使用||仅在值为非空值时有效,所以首先使用空值降序排序,我得到最后的值。
<cfquery>
SELECT *, '1' || #sortCol# as isNull
FROM table
ORDER BY isNull desc, #sortCol#
</cfquery>注意到我实际上并不提倡使用它,我不确定CF是否会以同样的方式处理它
https://stackoverflow.com/questions/15867049
复制相似问题