需要oracle查询来选择顺序

时间:2015-07-24 06:01:17

标签: oracle oracle11g sql-order-by case

表包含值1,2,3但显示值需要显示2,1,3

实施例

Table A

    column1      column2   column3
    1            Rat       Animals
    2            Parrot    Bird
    3            Lotus     Flower

需要首先显示鹦鹉然后显示鼠和莲花,这意味着2,1,3

预期输出:

    column1      column2   column3
    2            Parrot    Bird
    1            Rat       Animal
    3            Lotus     Flower

请帮助我按查询顺序解决问题。

2 个答案:

答案 0 :(得分:0)

这是一个奇怪的订单,无论如何都试试这个 -

SELECT Column1,Column2,Column3
FROM TableA
ORDER BY CASE WHEN Column1 = 2 THEN 1 
              WHEN Column1 = 1 THEN 2
              ELSE 3 
         END

答案 1 :(得分:0)

您可以在 ORDER BY 子句中使用 CASE 表达式来表示特定条件,并让其他行保留其顺序。

<强>设置

SQL> CREATE TABLE t
  2      (column1 int, column2 varchar2(6), column3 varchar2(7));

Table created.

SQL> INSERT ALL
  2      INTO t (column1, column2, column3)
  3           VALUES (1, 'Rat', 'Animals')
  4      INTO t (column1, column2, column3)
  5           VALUES (2, 'Parrot', 'Bird')
  6      INTO t (column1, column2, column3)
  7           VALUES (3, 'Lotus', 'Flower')
  8      INTO t (column1, column2, column3)
  9           VALUES (7, 'def', 'xyz')
 10      INTO t (column1, column2, column3)
 11           VALUES (4, 'abc', 'qwe')
 12  SELECT * FROM dual;

5 rows created.

SQL> COMMIT;

Commit complete.

表格数据

SQL> SELECT * FROM t;

   COLUMN1 COLUMN COLUMN3
---------- ------ -------
         1 Rat    Animals
         2 Parrot Bird
         3 Lotus  Flower
         7 def    xyz
         4 abc    qwe

必填查询

SQL> SELECT * FROM t
  2   ORDER BY
  3    CASE column1
  4       WHEN 1
  5          THEN 2
  6       WHEN 2
  7          THEN 1
  8       ELSE 3
  9    END,
 10   column1;

   COLUMN1 COLUMN COLUMN3
---------- ------ -------
         2 Parrot Bird
         1 Rat    Animals
         3 Lotus  Flower
         4 abc    qwe
         7 def    xyz

SQL>

因此,您有所需订单以及其他行保留其指定的订单。