gpt4 book ai didi

sql - 不同条件下的 Oracle order by

转载 作者:行者123 更新时间:2023-12-04 22:30:55 27 4
gpt4 key购买 nike

我有一个查询,我想根据条件进行两种排序。

例如,如果一个字段为 NULL,我需要下订单,如果不是,我必须下另一个订单。我该怎么做?

select *
from table_1 t
order by (if t.field1 is null then
order by t.field2 DESC, field3 ASC
else
order by t.field4 ASC, field5 DESC)

这是一个示例代码:我想根据 FIELD1 的值进行不同的顺序(ASC/DESC 和不同的列)

示例

有条件的
ID FIELD1  FIELD2  FIELD3  FIELD4  FIELD5
1 1 2 3 4 5
2 NULL 6 7 8 9

数据
ID PARENT_ID DATA1 DATA2 DATA3
1 1 X Y J
2 1 Z W U
3 2 XY YX O
4 2 ZW WZ I

select d.*
from data d, conditional c
where d.parent_id = c.id
and d.parent_id = 1
order by
case
when c.field1 is null then
data1 asc, data2 desc
else
data3 asc, data1 desc
end

在这个例子中,我选择了 DATA 行 ONE 和 TWO(父 id = 1 的行)。
现在我已经做出了这个决定,我想根据 CONDICTIONAL.FIELD1 列的值来调整 DATA 列。我希望现在更干净。

当然这个查询不起作用,但这是“我需要的”。

最佳答案

您可以在 CASE 子句中使用 ORDER BY 构造:

SQL> SELECT * FROM EMP T
2 ORDER BY
3 CASE
4 WHEN COMM IS NULL
5 THEN SAL
6 ELSE EMPNO
7 END
8 /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30

14 rows selected.

注意 :注意 DATA TYPE 子句中列的 ORDER BY

关于sql - 不同条件下的 Oracle order by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26032755/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com