Q:

ORDER BY ASC e DESC ao mesmo tempo

Preciso que os dados que possuírem tr_color = success sejam ordenados de maneira Decrescente DESC e os que não tiverem isso, que a coluna estiver vazia, seja ordena de maneira Ascendente ASC. 
Estou montando a query desse jeito.
SELECT mc.competencia,
CASE
   WHEN (COALESCE(mc.valor_pago, 0.0) = COALESCE(mc.valor_devido, 0.0)) THEN 'success'
   WHEN (COALESCE(mc.valor_pago, 0.0) = 0) THEN ''
   WHEN (COALESCE(mc.valor_pago, 0.0) <> COALESCE(mc.valor_devido, 0.0)) THEN 'danger'
END AS tr_color
FROM movimento_cobranca AS mc
WHERE mc.matricula = 2035
ORDER BY tr_color

E esta me retornando no momento o seguinte resultado.
Competencia |  tr_color
-----------------------
0419              ""
0419              ""
0419              ""
0519              ""
0619              ""
0719              ""
0819              ""
0919              ""
1019              ""
1119              ""
1219              ""
0419              ""
0319              success
0118              success
0319              success
0219              success
0119              success
0218              success
0318              success
0418              success
0518              success
0618              success
0718              success
0818              success
0918              success
1018              success
1118              success
1218              success

Eu preciso retornar de modo que os que possuem success fique na seguinte ordem.
0319 - 0219 - 0119 - 1218 - 1118 ... 
E os que não possuem success continuem igual.

EDIT SOLUÇÃO
SELECT * FROM
  (
    SELECT mc.competencia,
           CASE
             WHEN (COALESCE(mc.valor_pago, 0.0) = COALESCE(mc.valor_devido, 0.0)) THEN 'success'
             WHEN (COALESCE(mc.valor_pago, 0.0) = 0) THEN ''
             WHEN (COALESCE(mc.valor_pago, 0.0) <> COALESCE(mc.valor_devido, 0.0)) THEN 'danger'
             END AS tr_color
    FROM movimento_cobranca AS mc
    WHERE mc.matricula = 2035
      AND COALESCE(mc.valor_pago, 0.0) > 0.0
    ORDER BY data_vencimento DESC
  ) AS p
UNION ALL
(
  SELECT mc.competencia,
         CASE
           WHEN (COALESCE(mc.valor_pago, 0.0) = COALESCE(mc.valor_devido, 0.0)) THEN 'success'
           WHEN (COALESCE(mc.valor_pago, 0.0) = 0) THEN ''
           WHEN (COALESCE(mc.valor_pago, 0.0) <> COALESCE(mc.valor_devido, 0.0)) THEN 'danger'
           END AS tr_color
  FROM movimento_cobranca AS mc
  WHERE mc.matricula = 2035
    AND COALESCE(mc.valor_pago, 0.0) = 0.0
  ORDER BY data_vencimento
)

A:

Testa assim, se der certo eu comento a resposta.
SELECT * FROM 
(
  SELECT mc.competencia,
  (CASE
  WHEN (COALESCE(mc.valor_pago, 0.0) = COALESCE(mc.valor_devido, 0.0)) THEN 'success'
  WHEN (COALESCE(mc.valor_pago, 0.0) = 0) THEN ''
  WHEN (COALESCE(mc.valor_pago, 0.0) <> COALESCE(mc.valor_devido, 0.0)) THEN 'danger'
  END) AS tr_color
  FROM movimento_cobranca AS mc
  WHERE mc.matricula = 2035
  AND mc.valor_pago = COALESCE(mc.valor_devido, 0.0)
  ORDER BY tr_color DESC
  )
UNION ALL
  (
  SELECT mc.competencia,
  (CASE
  WHEN (COALESCE(mc.valor_pago, 0.0) = COALESCE(mc.valor_devido, 0.0)) THEN 'success'
  WHEN (COALESCE(mc.valor_pago, 0.0) = 0) THEN ''
  WHEN (COALESCE(mc.valor_pago, 0.0) <> COALESCE(mc.valor_devido, 0.0)) THEN 'danger'
  END) AS tr_color
  FROM movimento_cobranca AS mc
  WHERE mc.matricula = 2035
  AND mc.valor_pago <> COALESCE(mc.valor_devido, 0.0)
  ORDER BY tr_color
  )
) AS tableAlias

