2013-04-07 3 views
2

Насколько я понимаю,невозможно с QoQ. Как я обманываю Coldfusion в сортировке нулевых значений в последний раз, если я сортирую строку по возрастанию или по убыванию?ColdFusion (Railo) QoQ - Nulls Last

Я попытался использовать дело в SELECT, и ПОРЯДКА часть запроса, но выглядит как CF не нравиться (работает на Railo)

ответ

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.)

+0

после того, как некоторые думали, что я до двух вариантов, и закончилось а не QoQ, так как это, вероятно, исправить способ борьбы с этим. – Daniel

+0

@ Даниэль - Да, если источником является db-запрос, более эффективно это делать на уровне db, избегая дополнительных «union» и QoQ. – Leigh

+0

Обычно более эффективно делать подобные вещи на уровне дБ, но каждый раз в течение долгого времени использование «худших практик» дает лучшие результаты. –

2

относительно предыдущего квартала на обоих ColdFusion и Railo имеют очень ограниченный SQL Vocab, и нет ничего, что описывает, как сопоставить нули. Так как @Leigh предложил, добавьте еще один столбец - без каких-либо нулей - которые представляют собой сортировку, которую вы хотите.

Или, лучше, если возможно, справитесь со всем этим в БД. Очевидно, что это не всегда возможно (поскольку набор записей, который вы запрашиваете, возможно, не был получен из БД, в первую очередь ;-)

0

... был еще один способ, но он полагался на значения NULL и не пустой ''. Я собираюсь из памяти здесь, но это по существу это, используя ||, работает только в том случае, если значение не является нулевым, поэтому сначала используйте нулевые значения, сортирующие по убыванию, я получаю значения в конце.

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

Примечание Я на самом деле не выступает за использование этого и я не уверен, что если CF будет обрабатывать его таким же образом

Смежные вопросы