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 справится с этим так же

Другие вопросы по тегам