...order by iif(field1 is null, 1, 0), field1
Logic
The iif(field1 is null, 1, 0) constructs a virtual column with 1 for all null values. so you have
-------- -------
| field1 | |
|========|=======|
| 1.2 | 0 |
| 1.7 | 0 |
| - | 1 |
| - | 1 |
| 1.3 | 0 |
and then the sort of this virtual column takes care of putting the numbers below the nulls.
Multiple columns
If you have multiple columns that could have nulls you'd need an additional calculated column for each column. Something like
-------- ------- -------- -------
| field1 | s1 | field2 | s2 |
|========|=======|========|=======|
| 2 | 0 | - | 1 |
| 1 | 0 | 1 | 0 |
| - | 1 | 3 | 0 |
| - | 1 | - | 1 |
| 3 | 0 | 2 | 0 |
-------- ------- -------- -------
now you have 2 options.
1.
you can sort each field with the null at the end. so
...order by iif(field1 is null, 1, 0), field1, iif(field2 is null, 1, 0), field2
would give you
-------- ------- -------- -------
| field1 | field2 | s1 | s2 |
|========|========|=======|=======|
| 1 | 1 | 0 | 0 |
| 2 | - | 0 | 1 |
| 3 | 2 | 0 | 0 |
| - | 3 | 1 | 0 |
| - | - | 1 | 1 |
-------- ------- -------- -------
note that in field2 there is a null (row 2) before 3 because the sort for field1 (2) overrides the null sort logic (s2) for field2. the second null (row 5) in field2 comes after 3 (row 5) because of our null specific sort logic for s2.
2.
you can choose to have all nulls in field2 at the end, before sorting on field1. your code would then be...
...order by iif(field1 is null, 1, 0), iif(field2 is null, 1, 0), field1, field2
which gives you
-------- ------- -------- -------
| field1 | field2 | s1 | s2 |
|========|========|=======|=======|
| 1 | 1 | 0 | 0 |
| 3 | 2 | 0 | 0 |
| 2 | - | 0 | 1 |
| - | 3 | 1 | 0 |
| - | - | 1 | 1 |
-------- ------- -------- -------
Note
(Ref: Tom Gullen's comment in question) This takes care of putting only nulls at the end (empty strings, or strings with spaces will still be in the natural sort order)
Options
So.. in your case you'd be using either
...ORDER BY
IIF([RequestType] IS NULL, 1, 0), [RequestType],
IIF([Rank] IS NULL, 1, 0), [Rank],
IIF([ADRNo] IS NULL, 1, 0), [ADRNo]
or
...ORDER BY
IIF([RequestType] IS NULL, 1, 0),
IIF([Rank] IS NULL, 1, 0),
IIF([ADRNo] IS NULL, 1, 0),
[RequestType],
[Rank],
[ADRNo]