Ok, vamos a ver si te entendi. El truco general es que debes proveer tu propia función de comparación (similar a
https://stackoverflow.com/questions/...ustom-comparer) pero en sql. Básicamente, debes crear un campo extra que cambie la lógica que determina que es "mayor que":
Código SQL
[-]SELECT *,
CASE WHEN b <= 0 THEN (0, a) ELSE (1, a) END AS c
FROM (
SELECT 10 as a, 1 as b
UNION ALL
SELECT 20, 2
UNION ALL
SELECT 10, -1
UNION ALL
SELECT 20, -2
)a
ORDER BY c DESC
Retorna:
Código:
a | b | c
----+---+--------
20 | 2 | (1,20)
10 | 1 | (1,10)
20 | -2 | (0,20)
10 | -1 | (0,10)