1. 程式人生 > >sql server中的top在oracle中如何實現

sql server中的top在oracle中如何實現

最近的一個專案是一個統計學的專案,主要是報表,圖表的處理,還有一些匯入匯出,下載,生成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,這樣才是正確的。