Utilisez l'expression
field_c IS NOT NULL
comme premier ORDER BY
Objet. Il est évalué à ...FALSE
.. si NULLTRUE
.. si NON NULL.
Et FALSE
(0) trie avant TRUE
(1). Fonctionne pour tout type de données et toute distribution possible de valeurs.
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;