Oracle一些特殊用法

指定排序 DECODE(按照指定的soNo顺序排序)

SELECT id,so_no
FROM edi_booking
WHERE so_no IN ('TESTVENT0007', 'TESTVENT1111', 'TESTVENT0002', 'TESTVENT0003') 
ORDER BY 
DECODE(so_no, 'TESTVENT0007',1,'TESTVENT1111',2,'TESTVENT0002',3,'TESTVENT0003',4);

nvl

  • nvl 把值为空的值显示修改
  • count(remark) 统计的是remark值不为空的列
  • nvl(remark, 0) 把remark值为空的 列的值置为 0

    select count(*),count(qty),count(remark) from mrk_order;
    1973    1973           450
    select count(*),count(qty),count(nvl(remark, 0)) from mrk_order;
    1973    1973           1973
    
  • break on owner skip 2 相同的owner 只显示一次 不同德owner之间空2行

  • set pagesize 30; 设置页面大小 显示30行

rollup & cube & grouping sets(做报表)

用法:group by rollup/cube/grouping sets (A, B, C)

Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。如果是

  1. GROUP BY ROLLUP(A, B, C)的话,首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行 GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。
  2. GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作。
  3. group by grouping sets(A,B,C) = group by A, group by B, group by C

举例:

一、rollup

select owner,partition_by,sum(amount) from mrk_order where created_date > to_date('2-5月-16','DD-MON-RR') group by owner, partition_by order by owner;

select owner,partition_by,sum(amount) from mrk_order where created_date > to_date('2-5月-16','DD-MON-RR') group by rollup(owner, partition_by) order by owner;


等价于

select owner,partition_by,sum(amount) from mrk_order where created_date > to_date('2-5月-16','DD-MON-RR') group by owner, partition_by 
union all
select owner,null,sum(amount) from mrk_order where created_date > to_date('2-5月-16','DD-MON-RR') group by owner 
union all
select null,null,sum(amount) from mrk_order where created_date > to_date('2-5月-16','DD-MON-RR') order by owner;

二、cube

select owner,partition_by,sum(amount) from mrk_order where created_date > to_date('2-5月-16','DD-MON-RR') group by cube(owner, partition_by) order by owner;

三、grouping sets

select owner,partition_by,sum(amount) from mrk_order where created_date > to_date('2-5月-16','DD-MON-RR') group by GROUPING SETS(owner, partition_by) ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值