2015-11-10 99 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

这似乎很好地工作 –