ColdFusion (Railo) QoQ - последнее значение Null
Я понимаю, что nulls last
невозможно с QoQ. Как мне обмануть Coldfusion для сортировки пустых значений в последний раз, сортирую ли я строку по возрастанию или по убыванию?
Я попытался использовать case в части запроса SELECT и ORDER, но похоже, что CF не нравится (работает на Railo)
3 ответа
Там могут быть лучшие варианты, но один простой трюк заключается в добавлении столбца, представляющего приоритет сортировки. Присвойте записи с ненулевыми значениями более высокий приоритет, чем с нулевыми значениями. Затем просто выполните сортировку по значению приоритета, а затем по любым другим столбцам. Поскольку нулевые значения имеют более низкий приоритетный номер, они всегда будут сортироваться последними.
<!--- 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
.)
QoQ как в ColdFusion, так и в Railo имеет очень ограниченный словарный запас SQL, и нет ничего, что касалось бы сопоставления нулей. Поэтому, как предложил @Leigh, добавьте еще один столбец - без каких-либо нулей - который представляет нужную вам сортировку.
Или лучше, если это возможно, разобраться со всем этим в БД. Очевидно, что это не всегда возможно (поскольку запрашиваемый вами набор записей, возможно, не пришел из БД в первую очередь;-)
... был еще один способ, но он опирается на NULL
и не пустой ''
, Я собираюсь из памяти здесь, но это по сути, используя ||
работает только в том случае, если значение не является нулевым, поэтому, используя сортировку по нулевому значению в порядке убывания сначала, я получаю значения в конце.
<cfquery>
SELECT *, '1' || #sortCol# as isNull
FROM table
ORDER BY isNull desc, #sortCol#
</cfquery>
Обратите внимание, что я на самом деле не защищаю использование этого, и я не уверен, что CF справится с этим так же