【问题标题】:Select Table records in given order - Oracle按给定顺序选择表记录 - Oracle
【发布时间】:2020-05-29 00:13:03
【问题描述】:

我有一个表格可以说 - 学生,有 5 条记录,id 是 1 到 5,现在我想选择记录 - 结果应该像给定 id 列的排序顺序一样

id 列应为 - 5,2,1,3,4(每次顺序可能不同)

在 oracle sql 中有没有其他方法可以做到这一点?

在 mysql 中,我们有 FIELD() 子句来执行此操作。我想在 oracle 中实现这一点。

【问题讨论】:

  • 如果您按 id 排序,它将按顺序排序。您要在哪个字段上排序?
  • 这能回答你的问题吗? Custom Order in Oracle SQL

标签: sql oracle select sql-order-by


【解决方案1】:

一种快速而肮脏的方式使用instr()

order by instr(',5,2,1,3,4,', ',' || id ',')

要处理不在字符串中的值,您可以将它们转换为NULL 并相应地对它们进行排序:

order by nullif(instr(',5,2,1,3,4,', ',' || id ','), 0) nulls last

【讨论】:

    【解决方案2】:

    Oracle 使用堆组织表,这意味着默认情况下,行不按特定顺序存储。但是,在选择行时,您可以明确提及 ORDER BY 子句以 ASC(默认)/DESC 顺序返回结果集。

    您可以使用 DECODE/CASE 自定义排序,例如:

    with data as(
    select level num from dual connect by level <=5 
    )
    select num
    from data 
    order by case 
     when num = 5 then 1
     when num = 2 then 2
     when num = 1 then 3 
     when num = 3 then 4 
     when num = 4 then 5
    end;
    
           NUM
    ----------
             5
             2
             1
             3
             4
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多