【问题标题】:SQL Order By in oracle custom order by [duplicate]SQL Order By in oracle custom order by [重复]
【发布时间】:2014-12-11 03:31:33
【问题描述】:

我有一个要求 select * from USER where firstname IN ('关系', '三星', '苹果');

在执行此查询时,我会根据数据库中行的插入顺序获得结果。但我需要的结果完全相同,我为 IN 参数给出。 例如:上面的查询应该给出类似的结果


联结 三星 苹果


而不是任何其他订单。 三星 关系 苹果

我可以使用上述查询来按我给定的顺序获取选择结果吗?

【问题讨论】:

标签: sql oracle


【解决方案1】:

一种方法是使用case:

order by (case when firstname = 'nexus' then 1
               when firstname = 'samsumg' then 2
               when firstname = 'apple' then 3
          end)

另一种输入更少的方法:

order by instr(',nexus,samsung,apple,', ',' || name || ',')

【讨论】:

  • 还有其他方法吗,因为我有大约 100 到 200 个名字用于一个 select 语句。它更难为每个名字添加 1,2。
  • 我认为 Oracle 没有什么好的方法。你有多少数据?如果只有几千个,最好在应用程序代码中对客户端进行排序。
  • @srinivas 。 . .名字从何而来?如果它们已经在另一个表中或查询的结果中,那么这将简化此查询。
  • 我将从 excel 表中获取名称
  • 我想,Gordon 的order by instr(',nexus,samsung,apple,', ',' || name || ',') 可以让您免于打字。 ??或者,您可以对项目进行编号(在 Excel 中很容易),然后使用正则表达式来组装 case... 或者将已编号的项目转换为数据库中的辅助表,以用于基于 JOIN 的排序标准。如果您必须将项目添加到有序列表的末尾,则其中任何一个都需要返工......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多