SQL ORDER BY CASE + ORDER BY ID DESC

时间:2015-11-10 08:21:43

标签: sql sql-server

我试图通过两个参数来命令我的表,一个是'status',其中我有一个完美的CASE订单,第二列是'ID',我只想按照他们的表ID来排序案例的结果为了在排序的情况下将最新结果放在最上面。

这是我当前的疑问:

    SELECT ID, status 
FROM omv_tabelle 
ORDER BY CASE
WHEN status = 'ANMELDUNG' THEN '1'
WHEN status = 'KUNDE' THEN '2'
WHEN status = 'OMV_ANTRAG' THEN '3'
WHEN status = 'ABLEHNUNG' THEN '4' END ASC,
ID DESC

我不知道如何在不破坏案例功能的情况下将ID添加到排序中

我目前的输出如下:

407 KEIN_INTERESSE
406 KEIN_INTERESSE
405 KEIN_INTERESSE
397 KEIN_INTERESSE
396 KEIN_INTERESSE
411 ANMELDUNG
1   ANMELDUNG
6   KUNDE
5   KUNDE
4   KUNDE
3   KUNDE
2   KUNDE
394 ABLEHNUNG
393 ABLEHNUNG
392 ABLEHNUNG
391 ABLEHNUNG
390 ABLEHNUNG

所以状态的排序是错误的:/

应该是:

411 ANMELDUNG
1   ANMELDUNG
6   KUNDE
5   KUNDE
4   KUNDE
3   KUNDE
2   KUNDE
394 ABLEHNUNG
393 ABLEHNUNG
392 ABLEHNUNG
391 ABLEHNUNG
390 ABLEHNUNG
407 KEIN_INTERESSE
406 KEIN_INTERESSE
405 KEIN_INTERESSE
397 KEIN_INTERESSE
396 KEIN_INTERESSE

1 个答案:

答案 0 :(得分:5)

ID desc之后按case statement排序。我不理解您的akhtungs,但这取决于您的示例输出:

SELECT * 
FROM omv_tabelle 
ORDER BY CASE
              WHEN status = 'open' THEN 1
              WHEN status = 'pending' THEN 2
              WHEN status = 'closed' THEN 3 END,
         ID DESC

编辑:

SELECT ID, status 
FROM omv_tabelle 
ORDER BY CASE
              WHEN status = 'ANMELDUNG' THEN 1
              WHEN status = 'KUNDE' THEN 2
              WHEN status = 'OMV_ANTRAG' THEN 3
              WHEN status = 'ABLEHNUNG' THEN 4 
              ELSE 5 END ASC,
         status,
         ID desc