【问题标题】:SQL ORDER BY CASE + ORDER BY ID DESCSQL ORDER BY CASE + ORDER BY ID DESC
【发布时间】:2015-11-10 16:59:40
【问题描述】:

我正在尝试按两个参数对我的表进行排序,一个是“状态”,其中我有一个完美工作的 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

【问题讨论】:

  • 查看编辑后的答案。如果仍然不满意,请解释您的订购有什么问题...
  • 应该解释每一个反对意见。我提供了一个关于我当前结果的详细问题..
  • 我不反对。只是备注:查询和输出不匹配。 'KEIN_INTERESSE' 会排在最后,因为它会得到一个 NULL 的隐式排序键。我想你仍然有ELSE status,它会让你首先得到'KEIN_INTERESSE',因为Oracle 处理'1'>'K'。 (并且状态 '1 x ABGELEHNT' 将介于 '1' 和 '2' 之间。为某些状态创建排序键并将状态本身用作其他状态的排序键是一个坏主意 :-) 这只是为了解释发生了什么。 Giorgi Nakeuri 的回答中显示了如何正确地做到这一点。
  • @noa-dev,没关系。总有人无缘无故地投反对票。我记得我遇到了问题并提出了问题。并获得了 2 次反对票 :) stackoverflow.com/questions/27900996/ssrs-report-parameter 但一般来说,当您被反对票时,您应该重新阅读您的问题。可能有一些你可以改进的地方。

标签: sql sql-server


【解决方案1】:

在case statement 之后按ID desc 订购。我不明白你的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

【讨论】:

  • 它通过 ID 完美地订购了“opens”、“pendings”和“close”,但不幸的是,现在整个包排序错误。在我的示例中,我总共有 5 个不同的状态值,并且它们没有像 when 语句中所写的那样输出。让我快速更新我的问题
  • 好的,提供示例输出并解释订购有什么问题。
猜你喜欢
  • 2021-07-14
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
  • 2020-05-22
  • 1970-01-01
相关资源
最近更新 更多