Программирование >>  Преобразование значений null 

1 ... 12 13 14 [ 15 ] 16 17 18 ... 219


ALLEN

1600

WARD

1250

MARTIN

1250

1400

SMITH

JONES

2975

JAMES

MILLER

1300

FORD

3000

ADAMS

1100

BLAKE

2850

CLARK

2450

SCOTT

3000

KING

5000

или до них:

ENAME

COMM

SMITH

JONES

2975

CLARK

2450

BLAKE

2850

SCOTT

3000

KING

5000

JAMES

MILLER

1300

FORD

3000

ADAMS

1100

MARTIN

1250

1400

WARD

1250

ALLEN

1600

TURNER

1500

Решение

В зависимости от того, как должны быть представлены данные (и как конкретная СУБД сортирует значения 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 вывести по-



ENAME

COMM

TURNER

1500

ALLEN

1600

WARD

1250

MARTIN

1250

1400

SMITH

JONES

2975

JAMES

MILLER

1300

FORD

3000

ADAMS

1100

BLAKE

2850

CLARK

2450

SCOTT

3000

KING

5000

/* ОПРЕДЕЛЕННЫЕ ЗНАЧЕНИЯ 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



ENAME

COMM

MARTIN

1250

1400

WARD

1250

ALLEN

1600

TURNER

1500

SMITH

JONES

2975

JAMES

MILLER

1300

FORD

3000

ADAMS

1100

BLAKE

2850

CLARK

2450

SCOTT

3000

KING

5000

/* ОПРЕДЕЛЕННЫЕ ЗНАЧЕНИЯ 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

ENAME

COMM

SMITH

JONES

2975

CLARK

2450

BLAKE

2850

SCOTT

3000

KING

5000

JAMES

MILLER

1300

FORD

3000

ADAMS

1100

TURNER

1500

ALLEN

1600

WARD

1250

MARTIN

1250

1400

/* ОПРЕДЕЛЕННЫЕ ЗНАЧЕНИЯ 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



1 ... 12 13 14 [ 15 ] 16 17 18 ... 219

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика