Консультация № 108555
08.11.2007, 13:06
0.00 руб.
0 3 3
Привет всем!
Подскажите, как отсортировать строки по определенному полю, с учетом такой штуки: Если значение этого поля рано нулю или его нет, то использовать значени другого поля?

Обсуждение

Неизвестный
08.11.2007, 13:57
общий
это ответ
Здравствуйте, Stals!
если поля числовые и положительные можно использовать Greatest():
SELECT `f1`,`f2` FROM `table` ORDER BY GREATEST(`f1`,`f2`)

в противном случае, можно так и писать:
SELECT `f1`,`f2` FROM `table` ORDER BY IF(`f1` IS NULL OR `f1`=0,`f2`,`f1`)

Успехов.
Неизвестный
08.11.2007, 14:46
общий
это ответ
Здравствуйте, Stals!
Можно ставить условие OR (ИЛИ). Тогда получается, что если в левой части условие не исполняется переходим к правой части!
Неизвестный
09.11.2007, 02:23
общий
это ответ
Здравствуйте, Stals!
Предлагаю создать доп.поле с нужным условием и уже по этому полю делать сортировку.

Приложение:
Пример: сначала вывести все записи с 0, потом - отрицательные (выбор по абсолютному значению), затем - положительные. Можно сделать так:SELECT ЧИСЛО , DECODE(SIGN(ЧИСЛО), 0, 100000 , -1, ABS(ЧИСЛО)*10000 , +1, ЧИСЛО) СОРТ FROM (SELECT -5 ЧИСЛО FROM DUAL UNION ALL SELECT -4 ЧИСЛО FROM DUAL UNION ALL SELECT -3 ЧИСЛО FROM DUAL UNION ALL SELECT -2 ЧИСЛО FROM DUAL UNION ALL SELECT -1 ЧИСЛО FROM DUAL UNION ALL SELECT 0 ЧИСЛО FROM DUAL UNION ALL SELECT 1 ЧИСЛО FROM DUAL UNION ALL SELECT 2 ЧИСЛО FROM DUAL UNION ALL SELECT 3 ЧИСЛО FROM DUAL UNION ALL SELECT 4 ЧИСЛО FROM DUAL UNION ALL SELECT 5 ЧИСЛО FROM DUAL)ORDER BY СОРТ DESC -- результат:0 100000-5 50000-4 40000-3 30000-2 20000-1 100005 54 43 32 21 1
Форма ответа