oracle中如何更改order by的預設排序?
阿新 • • 發佈:2018-11-11
oracle中如何更改order by的預設排序?
直接看問題:
select * from scott.emp p order by p.job;
執行結果為:
通過order by 出來的排序結果以此為:ANALYST、CLERK、MANAGER、PRESIDENT、SALESMAN...
需求:
現要求排序結果為MANAGER為第一個顯示、CLERK為第二個顯示,其他預設排序
方法一:
通過union all 分別查詢後合併實現。
select * from (select * from scott.emp where job in 'MANAGER' order by job) union all select * from (select * from scott.emp where job = 'CLERK' order by job) union all select * from (select * from scott.emp where job not in ('MANAGER', 'CLERK') order by job)
執行結果為:
備註:
1、這裡應該採用union all 進行並集,不應該使用union。因為union,會對結果集進行排序,而union all 不排序。
2、這裡的子查詢中如果有order by 語句,不能直接使用union all 進行並集,會報語法錯誤。解決方案是將結果集作為一個新的表,查詢後再並集,即可。
方法二:
虛擬出來一個欄位,規定排序規則,依據新的排序規則進行排序即可。
select p.*, case to_char(p.job) when 'CLERK' then '2' when 'MANAGER' then '1' else '999' end neworder from scott.emp p order by neworder,p.job
執行結果: