2012年11月22日 星期四

一秒看破T-SQL分頁 使用 ROW_NUMBER() 函數

分頁~分頁~分頁~

勞版表示:ㄟ~那個誰 這頁要分頁 那頁也要 我沒說不要的都要

這時候就發現 「有沒有 在勞版的指示過後 gridview 的自動分頁都突然失效了 的八卦」 是真的

身為悲催小PG 立當自強



首先是一般查詢語法 定番是北風

不管是這樣

SELECT P.ProductID
      ,P.ProductName
      ,S.CompanyName
      ,C.CategoryName
  FROM Products AS P, Categories AS C, Suppliers AS S
 WHERE P.CategoryID = C.CategoryID AND P.SupplierID = S.SupplierID

還是這樣

SELECT P.ProductID
      ,P.ProductName
      ,S.CompanyName
      ,C.CategoryName
  FROM Products AS P
  JOIN Categories AS C ON P.CategoryID = C.CategoryID
  JOIN Suppliers AS S ON P.SupplierID = S.SupplierID

都會得到一張 完全合體型態的 查詢結果 如果你的北風是原廠的 那結果應該會是 77筆資料



接下來我們利用 ROW_NUMBER() 函數

ROW_NUMBER() 函數 其實只是幫每筆資料作編號而已 為了從中挑出某某頁的 某OO ~ XX筆 必須再加工一次



SELECT PPI AS '產品哀低'
      ,PPN AS '產品念母'
      ,SCN AS '公司念母'
      ,CCN AS '分類念母'
FROM (

SELECT ROW_NUMBER() OVER (ORDER BY ProductID) AS ROW,
       P.ProductID AS PPI
      ,P.ProductName AS PPN
      ,S.CompanyName AS SCN
      ,C.CategoryName AS CCN
  FROM Products AS P, Categories AS C, Suppliers AS S
 WHERE P.CategoryID = C.CategoryID AND P.SupplierID = S.SupplierID

) AS NewTable
WHERE NewTable.ROW >= (@PageRows * @PageIndex) + 1
  AND NewTable.ROW <= (@PageRows * @PageIndex) + @PageRows

圖解

結果

沒有留言:

張貼留言