1. 程式人生 > >SQLServer 實現oracle中rownum 的功能

SQLServer 實現oracle中rownum 的功能

轉載於 http://www.cnblogs.com/shuang121/archive/2011/03/11/1981827.html

Oracle資料庫換成SqlServer資料庫,在轉換的過程中出現一點問題,就是輸出表的行號的時候出現了問題,在Oracle資料庫中,可以直接通過它的rownum來完成,語句如下

select rownum as num,t.occurrenceid,t.occurrencenum2,t.registerdate,b.occtype,t.AMOUNT,t.occresult,t.occtime,t.yr,t.zi,t.hao,t.step as step from occurrence t left join occ_type b on t.occtypeid = b.occtypeid where t.step<3 and t.Departmentid='101000' order by t.registerdate desc

但是放到SqlServer2005中就會出錯看,說是rownum有錯誤,最後才知道在SqlServer查詢行號不是那樣查的,是用SqlServer的row_number()來查詢的

select row_number() over(order by t.registerdate desc) as num,t.occurrenceid,t.occurrencenum2,t.registerdate,b.occtype,t.AMOUNT,t.occresult,t.occtime,t.yr,t.zi,t.hao,t.step as step from occurrence t left join occ_type b on t.occtypeid = b.occtypeid where t.step<3 and t.Departmentid='101000'

解釋:

1 此方法把括號裡的查詢結果放到變數:temp 裡面( 我也不確定是不是變數), 並用row_number() 函式進行一個行號跟蹤, 再用over 函式進行一個列的排序規則( 是這必須的), 並指定列名為'rownum'

2 緊接著在下面的語句可以對 'rownum' 進行一個指定行號的查詢