|
Программирование >> Преобразование значений null
Решение В зависимости от того, как должны быть представлены данные (и как конкретная СУБД сортирует значения NULL), столбцы, допускающие неопределенные значения, можно сортировать по возврастанию или по убыванию: 1 select ename,sal,comm 2 from emp 3 order by 3 1 select ename,sal,comm 2 from emp 3 order by 3 desc Такое решение привело бы к сортировке столбца, не содержащего неопределенные значения, в убывающем или возврастающем порядке. Если необходимо сортировать неопределенные значения иначе, чем определенные, например требуется расположить определенные значения по убыванию или возрастанию, а все значения NULL вывести по-
/* ОПРЕДЕЛЕННЫЕ ЗНАЧЕНИЯ COMM СОРТИРУЮТСЯ ПО УБЫВАНИЮ, ПОСЛЕ НИХ РАСПОЛАГАЮТСЯ ВСЕ СТРОКИ С НЕОПРЕДЕЛЕННЫМИ ЗНАЧЕНИЯМИ */ 1 select ename,sal,comm 2 from ( 3 select ename,sal,comm, 4 case when comm is null then 0 else 1 end as is null 5 from emp 6 ) x 7 order by is null desc,comm desc сле них, то можно использовать выражение CASE, которое обеспечит сортировку столбца по условию. DB2, MySQL, PostgreSQL и SQL Server Выражение CASE позволяет отметить строку со значением NULL специальным флагом . Идея состоит в том, чтобы установить флаг с двумя значениями, одно из которых представляет неопределенные значения (NULL), а другое - определенные (не-NULL). Сделав это, просто добавляем столбец с флагом в оператор ORDER BY. Такой прием позволяет без труда размещать строки с неопределенными значениями в начале или конце списка без смешения их со строками, содержащими определенные значения: /* ОПРЕДЕЛЕННЫЕ ЗНАЧЕНИЯ COMM СОРТИРУЮТСЯ ПО ВОЗВРАСТАНИЮ, ПОСЛЕ НИХ РАСПОЛАГАЮТСЯ ВСЕ СТРОКИ С НЕОПРЕДЕЛЕННЫМИ ЗНАЧЕНИЯМИ */ 1 select ename,sal,comm 2 from ( 3 select ename,sal,comm, 4 case when comm is null then 0 else 1 end as is null 5 from emp 6 ) x 7 order by is null desc,comm
/* ОПРЕДЕЛЕННЫЕ ЗНАЧЕНИЯ COMM СОРТИРУЮТСЯ ПО ВОЗВРАСТАНИЮ, ВСЕ СТРОКИ С НЕОПРЕДЕЛЕННЫМИ ЗНАЧЕНИЯМИ РАСПОЛАГАЮТСЯ ПЕРЕД НИМИ */ 1 select ename,sal,comm 2 from ( 3 select ename,sal,comm, 4 case when comm is null then 0 else 1 end as is null 5 from emp 6 ) x 7 order by is null,comm
/* ОПРЕДЕЛЕННЫЕ ЗНАЧЕНИЯ COMM СОРТИРУЮТСЯ ПО УБЫВАНИЮ, ВСЕ СТРОКИ С НЕОПРЕДЕЛЕННЫМИ ЗНАЧЕНИЯМИ РАСПОЛАГАЮТСЯ ПЕРЕД НИМИ */ 1 select ename,sal,comm 2 from ( 3 select ename,sal,comm, 4 case when comm is null then 0 else 1 end as is null
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |