我有一个查询,我想根据条件进行两种订单。
例如,如果一个字段为 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和不同的列)
EXAMPLE
有条件的
ID FIELD1 FIELD2 FIELD3 FIELD4 FIELD5
1 1 2 3 4 5
2 NULL 6 7 8 9
DATA
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
在此示例中,我选择数据行 1 和 2(父 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.
NOTE: 照顾好DATA TYPE
中的列数ORDER BY
clause.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)