2010年7月24日 星期六

SQL 利用ROW_NUMBER()來進行排序

在MS SQL Server 2005之後有一個指令ROW_NUMBER(),可以讓我們很方便得來對資料進行,分組,這應用在很多方面上,如將資料在資料庫中每次拋出一頁10筆的資料給網頁呈現,以提昇網頁速度,而不是將全部的資料拋出去,然後再去分一頁10筆。

在這裡,我們將ROW_NUMBER()做另外一種應用,就是拿來排序,並自動產生1,2,3...等等的這種序號的欄位,當然,所有資料也會依照你想遞增排序(ASC)或是遞減排序(DESC).

這裡我們示範的範例Table結構如下,有收入(Revenue)與業績目標(Goal)等欄位,如下圖:

create table #TmpScore
(
    SalesName nvarchar(10)     default(''),
    Revenue int default(0),
    Goal int default(0)
)

利用ROW_NUMBER()指令來產生排序編號欄位的script,排序欄位我們給它一個名稱叫做sort,如下:

SELECT * FROM
(
    SELECT * ,ROW_NUMBER() OVER (ORDER BY CASE WHEN Goal=0 THEN 0 ELSE Revenue/Goal END DESC) AS sort FROM #TmpScore
) #TmpScore

下圖左側是尚未使用ROW_NUMBER()前,只是將所有資料Select查詢出來,下圖右側則是套用我們上面的script所執行出來的結果,可以看出已經自動按照業務員的業績排列,業績達成率越高的,則排名越高:

沒有留言:

張貼留言