Там может быть лучше варианты, но один простой трюк, чтобы добавить колонка, представляющая приоритет сортировки. Назначьте записи с ненулевыми значениями более высокий приоритет, чем нулевые. Затем просто сначала выберите значение приоритета, а затем любые другие столбцы, которые вы хотите. Так как нулевые значения имеют более низкий приоритет, они всегда будут сортироваться последним.
<!--- 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, так как это, вероятно, исправить способ борьбы с этим. – Daniel
@ Даниэль - Да, если источником является db-запрос, более эффективно это делать на уровне db, избегая дополнительных «union» и QoQ. – Leigh
Обычно более эффективно делать подобные вещи на уровне дБ, но каждый раз в течение долгого времени использование «худших практик» дает лучшие результаты. –