Użyj wyrażenia
field_c IS NOT NULL
jako pierwszy ORDER BY
przedmiot. Ocenia się na ...FALSE
.. if NULLTRUE
.. jeśli NIE NULL.
I FALSE
(0) sortuje przed TRUE
(1). Działa dla każdego typu danych i dowolnej możliwej dystrybucji wartości.
SELECT field_a,
row_number() OVER (PARTITION BY field_b
ORDER BY field_c IS NOT NULL, field_c) AS row_number
FROM test_table
ORDER BY row_number;