2015-11-10 129 views
0

我試圖通過兩個參數來排序我的表格,其中一個是'狀態',我有一個完美的CASE命令,第二列是'ID',我只是想訂購這些案例的結果通過他們的表ID來使最新的結果在排序後的案例中處於最高位置。SQL ORDER BY CASE + ORDER BY 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' END ASC, 
ID DESC 

我不知道如何添加ID成排序,同時不破壞的情況下funktionality

我的電流輸出是這樣的:

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 

所以狀態的排序是錯誤的:/

它肩d是:

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

見編輯答案。如果它仍然不能滿足你,然後解釋你的訂單有什麼問題... –

+1

應該解釋每一個downvote。我提供了一個詳細的問題與我目前的結果.. –

+1

沒有downvote從我。只是一句話:查詢和輸出不匹配。 'KEIN_INTERESSE'會最後一個,因爲它會得到一個NULL的隱式排序鍵。我想你還是有'ELSE status',這會讓你'KEIN_INTERESSE'第一次,因爲Oracle會處理'1'>'K'。 ('1 x ABGELEHNT'的狀態會介於'1'和'2'之間爲某些狀態創建排序鍵並將狀態本身用作其他排序鍵的排序鍵是一個壞主意:-)這只是爲了exlain發生了什麼事。 Giorgi Nakeuri的答案顯示瞭如何正確地做到這一點。 –

回答

5

排序ID desccase 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 
+0

它通過身份證中的ID完美地命令「打開」,「掛起」和「關閉」,但不幸的是整個包裹現在被排序錯誤。在我的例子中,我有5個完全不同的狀態值,它們並不像在when語句中寫的那樣輸出。讓我快速更新我的問題 –

+0

好吧,提供示例輸出並解釋訂購過程中出現了什麼問題。 –

+0

這似乎很好地工作 –