2012年3月7日 星期三

SQL 2005以後,已有ROWNO指令可用

以前我們在寫報表的時候,遇到查詢結果要排名次,因為資料庫ms sql 2000不支援  (oracle早就有這個屬性了),所以無法產生列號,所以只能自己在產生出來之後,再跑迴圈去寫入列號。

其實在2005的版本以後,已經有這個屬性了,未來可利用這個方式來撰寫,就少一道在程式裡面撰寫的麻煩了,不過這個方法,僅限在ms sql,如果要多db支援的話,那就必須自行轉換sql語法了。

範例:以北風資料庫裡面的訂單,要取得前99筆的語法。

select top 100 * from (
select [order details].*,orders.customerid
,ROW_NUMBER() over (order by [order details].orderid,productid) as r
from [order details]
left join orders on [order details].orderid = orders.orderid
) as o where r > 100
order by r

沒有留言: