建议你优化一下你的sql,你完全可以不用子查询将那4个表都扫描两遍(等到你数量巨大,效率会很低,你要在开发阶段避免这种情况的发生),你看一下oracle的LAG()和LEAD()统计函数,它可以在一次查询中取出同一字段的前N行的数据和后N行的值
你的s.status_name字段里是不是字符和数字都有啊,你贴一下,看看有什么规律
给你个例子
create table a (id number,name varchar2(10));
insert into a values (1,'aa');
insert into a values (2,'bb');
insert into a values (3,'cc');
cimmit;
取当前行的前一行数据
select id,name,lag(id,1)over(order by id),lag(name,1)over(order by id) from a where id in (2,3);
取当前行的后一行数据
select id,name,lead(id,1)over(order by id),lead(name,1)over(order by id) from a where id in (2,3);
这个a表的id不就相当于你的l.location_id吗?
to_number(s.status_name,'999999')
.to_number(s.status_name,'999999.99')
.to_number(s.status_name,'$999999.99')
to_number(),to_date(),to_char()都是有两个参数的,你没用对而已
改成这样就可以了
这样不行啊,我刚才试过的
如果字段里面有NULL或者其他非数字型的是不可以的
或者用 case when 语句?
广告 您可能关注的内容 |