Postgresql:订购列以匹配自定义条件

EmC*_*mCo 2 sql sorting postgresql-9.1

我在排序查询结果时遇到问题.

执行此查询后:

SELECT id_doc_header, id_clasificacion_doc 
FROM cabecera_documento INNER JOIN tipo_doc USING (id_tipo_doc) 
 INNER JOIN clasificacion_documento USING (id_clasificacion_doc) 
WHERE finalizado = 'f' AND cod_exp = '10-APC-2013' AND id_clasificacion_doc in(2,3,4,5)
ORDER BY case when Id_clasificacion_doc = 5 THEN 5 when Id_clasificacion_doc = 3 THEN 3 
  when Id_clasificacion_doc = 2 THEN 2 when Id_clasificacion_doc = 4 THEN 4 END;
Run Code Online (Sandbox Code Playgroud)

或这个:

SELECT id_doc_header, id_clasificacion_doc 
FROM cabecera_documento INNER JOIN tipo_doc USING (id_tipo_doc) 
INNER JOIN clasificacion_documento USING (id_clasificacion_doc) 
WHERE finalizado = 'f' AND cod_exp = '10-APC-2013' 
AND id_clasificacion_doc in(2,3,4,5) 
ORDER BY id_clasificacion_doc = 5, id_clasificacion_doc = 3, id_clasificacion_doc = 2, id_clasificacion_doc = 4;
Run Code Online (Sandbox Code Playgroud)

我得到的结果是:

 id_doc_header | id_clasificacion_doc 
---------------+----------------------
          1657 |                    2
          1658 |                    3
          1658 |                    2
          1661 |                    4
          1663 |                    4
          1665 |                    5
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何在下一个订单中获得结果?

 id_doc_header | id_clasificacion_doc 
---------------+----------------------
          1665 |                    5
          1658 |                    3
          1657 |                    2
          1661 |                    4
          1663 |                    4
Run Code Online (Sandbox Code Playgroud)

我正在使用posgresql 9.1.

提前致谢.

Gor*_*off 8

尝试通过以下方式明确订单:

order by (case when id_clasificacion_doc = 5 then 1
               when id_clasificacion_doc = 3 then 2
               when id_clasificacion_doc = 2 then 3
               when id_clasificacion_doc = 4 then 4
          end)
Run Code Online (Sandbox Code Playgroud)