2

我的理解是nulls lastQoQ 是不可能的。无论我是对行进行升序还是降序排序,我如何欺骗coldfusion最后对空值进行排序?

我已经尝试在查询的 SELECT 和 ORDER 部分使用 case,但看起来 CF 不喜欢它(在 railo 上运行)

4

3 回答 3

4

可能有更好的选择,但一个简单的技巧是添加一个表示排序优先级的列。为具有非空值的记录分配比空值更高的优先级。然后只需先按优先级值排序,然后再按您想要的任何其他列。由于空值具有较低的优先级编号,因此它们将始终排在最后。

    <!--- 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-07T21:17:29.747 回答
2

ColdFusion 和 Railo 上的 QoQ 都具有非常有限的 SQL 词汇,并且没有任何内容涉及如何整理空值。因此,正如@Leigh 所建议的那样,添加另一列 - 没有任何空值 - 代表您想要的排序。

或者,如果可能的话,最好在数据库中处理所有这些。显然这并不总是可能的(因为您查询的记录集可能一开始就不是来自数据库;-)

于 2013-04-07T21:21:09.413 回答
0

...还有另一种方法,但它依赖于 values 是NULL而不是 empty ''。我在这里从记忆中开始,但这本质上是它,||仅在值非空时才使用,因此首先使用空值降序排序,最后得到值。

 <cfquery>
    SELECT *, '1' || #sortCol# as isNull
    FROM table
    ORDER BY isNull desc, #sortCol#
 </cfquery>

注意我实际上并不提倡使用它,我不确定 CF 是否会以同样的方式处理它

于 2013-04-08T00:13:42.963 回答