在条件问题

时间:2018-01-18 06:56:12

标签: sql database oracle conditional-statements

你能解释一下为什么当我处于条件状态时,结果的返回顺序与写入顺序不同吗?

我正在尝试从all_tab_columns中提取列名,我希望以与in条件中指定的顺序相同的顺序检索它们。

例如:

select * from all_tab_columns
where table_name='X'
and column_name in ('d','a','Z','e');

输出结果为:

列名

一 d Ë ž

我希望输出的顺序与IN条件中指定的顺序相同。

你可以建议吗?

3 个答案:

答案 0 :(得分:3)

您可以使用您选择的特定顺序创建CTE,使用all_tab_columns加入CTE并按CTE顺序排序。

WITH ord (rn, column_name)
     AS (SELECT 1, 'd' FROM DUAL
         UNION ALL
         SELECT 2, 'a' FROM DUAL
         UNION ALL
         SELECT 3, 'Z' FROM DUAL
         UNION ALL
         SELECT 4, 'e' FROM DUAL)
  SELECT *
    FROM all_tab_columns t JOIN ORD o ON t.column_name = o.column_name
   WHERE table_name = 'X'
ORDER BY o.rn;

答案 1 :(得分:1)

默认情况下,Oracle会在IN CLAUSE中按升序检索结果。您需要在Order by子句中明确提及要检索数据集的顺序。使用此:

select * from all_tab_columns 
where table_name='X'
and column_name in  ('d','a','Z','e')
order by decode(column_name,'d',1,'a',2,'Z',3);

DEMO

答案 2 :(得分:0)

以某种排序顺序从数据库中检索数据的唯一方法是在查询中包含ORDER BY。 ORDER BY无可替代。

感谢。