以前我們在寫報表的時候,遇到查詢結果要排名次,因為資料庫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
沒有留言:
張貼留言