我的理解是,nulls last
對於QoQ是不可能的。我如何欺騙coldfusion進行排序空值,無論我是排序行升序還是降序?ColdFusion(Railo)QoQ - Nulls Last
我使用查詢的選擇和訂購一部分的情況下嘗試過,但看起來像CF不喜歡它(上railo運行)
我的理解是,nulls last
對於QoQ是不可能的。我如何欺騙coldfusion進行排序空值,無論我是排序行升序還是降序?ColdFusion(Railo)QoQ - Nulls Last
我使用查詢的選擇和訂購一部分的情況下嘗試過,但看起來像CF不喜歡它(上railo運行)
有可能是更好的選擇,但一個簡單的竅門是添加表示排序優先級的列。使用非空值分配記錄的優先級高於空值。然後簡單地按照優先級值排序,然後按照您想要的其他列進行排序。由於空值具有較低的優先級編號,因此它們將始終排序最後。
<!--- 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
可能做你的數據庫查詢類似的東西。)
環比上都ColdFusion和Railo有一個非常有限的SQL詞彙,並沒有任何東西處理如何整理空值。正如@Leigh所建議的,添加另一列 - 沒有任何空值 - 表示您想要的排序。或者更好,如果可能的話,在DB中處理所有這些。顯然,這並不總是可能的(因爲你查詢的記錄集可能不是來自數據庫;-)
......還有一種方法,但它依賴於值爲NULL
和不爲空''
。 我從這裏回憶起,但實際上它是這樣的,使用||
只適用於值非空的情況,所以首先使用空值降序排序,最後得到值。
<cfquery>
SELECT *, '1' || #sortCol# as isNull
FROM table
ORDER BY isNull desc, #sortCol#
</cfquery>
注意我實際上並不主張使用的這一點,我不知道是否會CF處理它以同樣的方式
後有些人認爲我是到了兩個選項,並結束在數據庫查詢而不是QoQ中實現它,因爲它可能正確地處理這個問題。 – Daniel 2013-04-08 00:07:06
@Daniel - 是的,如果源是db查詢,那麼在db級別執行此操作會更有效,避免額外的'union'和QoQ。 – Leigh 2013-04-08 03:13:37
在db級別做這種事通常更高效,但每隔一段時間使用「最差做法」會產生更好的結果。 – 2013-04-08 13:29:04