oracle中如何更改order by的默认排序?

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


运行结果:






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值