sql server中的top在oracle中如何实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012934325/article/details/82119862

最近的一个项目是一个统计学的项目,主要是报表,图表的处理,还有一些导入导出,下载,生成PDF等的模块功能,原系统采用的是C#语言,数据库是SQL SERVER,C/S结构,如今我们改善为B/S结构的,通过访问服务器来进行网页的操作,方便也符合现在人的使用习惯。
在系统改造的过程中有一个问题,就是原SQL是使用了sql server中的top,表示取查询结果的前几条数据,然后我查了一下可以使用oracle中的虚拟列来替代top达到相同效果。就写了如下的代码:

select t.name,t.populatition 
from table t 
where rownum<=(select count(1) from table1 where yxbz='1')

测试结果不对,并没有达到和原来的效果,然后仔细的又查了一下,原来在oracle中用虚拟列代表top时,rownum不是这种用法,而是需要如下的使用:

select A.a,A.b
from(
select t.name as a,t.populatition as b
from table t
) A where A.rownum<=(select count(1) from table1 where yxbz='1')
order by rownum asc 

这样才可以达到与SQL server中top的同样效果。
总结:也就是说,如果想要在oracle中实现sql server的top用法,就需要将查询的结果集再外层包一层然后使用rownum,这样才是正确的。

猜你喜欢

转载自blog.csdn.net/u012934325/article/details/82119862