【问题标题】:Multiple Custom orders oracle多个自定义订单 oracle
【发布时间】:2020-10-23 12:27:02
【问题描述】:

在使用CASE时,是否可以在由多个订单驱动的Oracle SQL中执行sn ORDER BY

例如:

+------------------+
| Code | DateTime  |
+------------------+
| ABC  | 7-01-2020 |
+------------------+
| DSF  | 7-01-2020 |
+------------------+
| ABC  | 6-01-2020 |
+------------------+

我想在CodeABC 的地方订购它,然后按行的DateTime 订购它。 为什么我不能这样做?

SELECT * FROM TABLE
ORDER BY
    CASE
        WHEN CODE = 'ABC' THEN '001'
        ELSE 'ZZZ'
    END
AND DATETIME ASC;

我只能使用CASE 语句,而不能在ORDER BY 子句中使用其他任何内容。如果我删除AND DATETIME ASC;,查询将完成,仅按CODE 排序,其中代码ABC 是第一个。

【问题讨论】:

    标签: sql oracle select sql-order-by


    【解决方案1】:

    如果您用逗号 (,) 而不是 AND 分隔它们,则可以按多个术语排序:

    SELECT * FROM TABLE
    ORDER BY
        CASE
            WHEN CODE = 'ABC' THEN '001'
            ELSE 'ZZZ'
        END, -- Note the comma here
        DATETIME ASC;
    

    【讨论】:

      【解决方案2】:

      通常,case 表达式不会使用字符串:

      ORDER BY (CASE WHEN CODE = 'ABC' THEN 1 ELSE 2 END),
               DATETIME ASC;
      

      字符串当然可以。他们只是看起来很尴尬。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 2014-08-13
      相关资源
      最近更新 更多