【问题标题】:Oracle - Order by specific values first, then the restOracle - 首先按特定值排序,然后是其余的
【发布时间】:2016-08-30 10:02:38
【问题描述】:

我有一个 Oracle 11g 表,其中有一列指示许多项目的状态。有什么方法可以选择先排序三个特定标志,然后按字母顺序排列其余标志?

类似

SELECT ITEM, STATUS FROM FOO ORDER BY STATUS ('I', 'U', 'P') ASC

然后会列出所有状态为 I、U、P 的项目,最后是剩余的项目。

【问题讨论】:

    标签: sql oracle sql-order-by


    【解决方案1】:

    这适用于所有数据库引擎

    SELECT ITEM, STATUS 
    FROM FOO 
    ORDER BY case when STATUS = 'I' then 1
                  when STATUS = 'U' then 2
                  when STATUS = 'P' then 3
                  else 4
             end,
             status
    

    【讨论】:

      【解决方案2】:

      试试这个:

      为我工作..查看演示:

      create table FOO (ITEM varchar2(10), STATUS varchar2(10)) ;
      
      SELECT ITEM, STATUS 
          FROM FOO 
          ORDER BY DECODE (STATUS,'I',1, 'U',2, 'P',3,4) ;
      

      结果:

      SQL> SELECT ITEM, STATUS 
              FROM FOO 
              ORDER BY DECODE (STATUS,'I',1, 'U',2, 'P',3,4) ;
        2    3  
      no rows selected
      

      你是怎么用的??

      【讨论】:

      • 由于某种原因,这会引发关于缺少右括号的错误。
      • 它为我工作..您尝试过似乎有问题..检查演示\
      • 我可以确认这行得通;提问者似乎以某种方式扼杀了语法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-03
      • 2014-01-18
      • 1970-01-01
      • 2012-12-15
      • 2023-03-05
      • 2013-08-29
      • 1970-01-01
      相关资源
      最近更新 更多