...order by iif(field1 is null, 1, 0), field1
Logic
iif (field1 - ноль, 1, 0) создает виртуальный столбец с 1 для всех нулевых значений. так что у вас есть
-------- -------
| field1 | |
|========|=======|
| 1.2 | 0 |
| 1.7 | 0 |
| - | 1 |
| - | 1 |
| 1.3 | 0 |
, а затем сортировка этого виртуального столбца ставит числа под нулями.
Несколько столбцов
Если у вас есть несколько столбцов, которые могут иметь нулевые значения, вам потребуется дополнительный вычисляемый столбец для каждого столбца. Что-то вроде
-------- ------- -------- -------
| field1 | s1 | field2 | s2 |
|========|=======|========|=======|
| 2 | 0 | - | 1 |
| 1 | 0 | 1 | 0 |
| - | 1 | 3 | 0 |
| - | 1 | - | 1 |
| 3 | 0 | 2 | 0 |
-------- ------- -------- -------
теперь у вас есть 2 варианта.
1.
вы можете отсортировать каждое поле с нулем в конце. так
...order by iif(field1 is null, 1, 0), field1, iif(field2 is null, 1, 0), field2
даст вам
-------- ------- -------- -------
| field1 | field2 | s1 | s2 |
|========|========|=======|=======|
| 1 | 1 | 0 | 0 |
| 2 | - | 0 | 1 |
| 3 | 2 | 0 | 0 |
| - | 3 | 1 | 0 |
| - | - | 1 | 1 |
-------- ------- -------- -------
обратите внимание, что в field2 перед 3 стоит ноль (строка 2), потому что сортировка для field1 (2) переопределяет логику нулевой сортировки (s2) для field2. второй нуль (строка 5) в field2 следует после 3 (строка 5) из-за нашей логики сортировки, специфичной для null для s2.
2.
вы можете выбрать все нули в поле2 в конце, перед сортировкой по полю1. тогда ваш код будет ...
...order by iif(field1 is null, 1, 0), iif(field2 is null, 1, 0), field1, field2
, что дает вам
-------- ------- -------- -------
| field1 | field2 | s1 | s2 |
|========|========|=======|=======|
| 1 | 1 | 0 | 0 |
| 3 | 2 | 0 | 0 |
| 2 | - | 0 | 1 |
| - | 3 | 1 | 0 |
| - | - | 1 | 1 |
-------- ------- -------- -------
Примечание
(Ссылка: рассматриваемый комментарий Тома Гуллена). В этом случае в конце ставятся только нулевые значения (пустые строки или строки с пробелами по-прежнему будут в естественном порядке сортировки)
Опция
Так что .. в вашем случае вы бы использовали либо
...ORDER BY
IIF([RequestType] IS NULL, 1, 0), [RequestType],
IIF([Rank] IS NULL, 1, 0), [Rank],
IIF([ADRNo] IS NULL, 1, 0), [ADRNo]
или
...ORDER BY
IIF([RequestType] IS NULL, 1, 0),
IIF([Rank] IS NULL, 1, 0),
IIF([ADRNo] IS NULL, 1, 0),
[RequestType],
[Rank],
[ADRNo]