【问题标题】:Get results in order of values passed in 'IN' oracle 11g按“IN”oracle 11g 中传递的值的顺序获取结果
【发布时间】:2016-01-14 09:27:09
【问题描述】:

我有

SELECT * FROM adp_relations WHERE rel_name IN ('primary2bus_org', 'employee2user')

我想选择并返回具有我在 IN 子句中传递的指定顺序的记录(首先显示具有 primary2bus_org='xyz'、employee2user='abc'、...的记录)

这样做的有效方法是什么?

【问题讨论】:

  • 尝试对ORDER BY使用CASE语句
  • 效果很好,方法也不错。
  • 很高兴知道它有帮助。

标签: oracle oracle11g


【解决方案1】:

一种方法是使用派生表:

;WITH cte AS
(
  SELECT 'primary2bus_org' AS rel_name, 1 AS orderNum FROM dual
  UNION ALL
  SELECT 'employee2user' AS rel_name, 2 AS orderNum FROM dual
)
SELECT a.* 
FROM adp_relations a
JOIN cte c
  ON a.rel_name = c.rel_name
ORDER BY c.orderNum;

请注意,如果您的adp_relations 多次出现任何搜索字符串,则每个“子组”的顺序将是非确定性的(或者更确切地说取决于执行计划):

1 primary2bus_org
2 primary2bus_org
3 primary2bus_org
10 employee2user

vs

3 primary2bus_org
2 primary2bus_org
1 primary2bus_org
10 employee2user

如果是这样,您应该添加ORDER BY c.orderNum, a.<col_which_is_unique_like_id> 以获得稳定的排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 2017-03-30
    相关资源
    最近更新 更多