2道经典的oracle查询案例

第一题:

 

第一题:

直接贴代码:
select Id,Name,Money,(select Money from test1 a where a.Id = decode(b.Id - 1,0,null,b.Id-1)) Money1 from test1 b;  
经典的子查询,注意的就是null值的处理问题,decode或者case是oracle很重要的单行函数。

例如:涨工资的例子: select ename,job,sal 涨前, decode(job,'PRESIDENT',sal+1000, 'MANAGER',sal+800, sal+400) 涨后 from emp;
等同于:select ename,job,sal 涨前,case job when 'PRESIDENT' then sal+1000
                    when 'MANAGER' then sal+800
                    else sal+400
            end 涨后
            from emp;

 第二题:

代码: select CI_ID,wm_concat(STU_NAME) from ( select CI_ID, STU_NAME
      from  pm_ci p1, pm_stu p2 
     where
                 STU_ID = to_number(substr(p1.STU_IDS,1,1)) or
                 STU_ID = to_number(substr(p1.STU_IDS,3,1)) or
                 STU_ID = to_number(substr(p1.STU_IDS,5,1)) or
                 STU_ID = to_number(substr(p1.STU_IDS,7,1)) 
    ) group by CI_ID;          //行转列函数 wm_concat ,还有一个思路就是 in方法,把1,2,3,4放在in()里面,这里就不演示了。

转载于:https://my.oschina.net/u/2317688/blog/512664

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值