2012-09-12 83 views
0

我試圖在分頁中選擇每個ItemCategoryID中的5個記錄,使用下面的查詢我能夠在每個分類中獲得5條記錄但分頁不工作我宣佈第10號,但我得到19個記錄和@ItemCounter TOTALCOUNT來了45 ...即時通訊沒有得到如何解決it..here是查詢:無法使用分頁在每個項目類別中選擇'n'個記錄

DECLARE @PageIndex int = 1 
DECLARE @PageSize int = 10 
DECLARE @StartRow int 
DECLARE @EndRow int 
SET @StartRow = (@PageSize * (@PageIndex - 1)) + 1 
SET @EndRow = @PageSize * @PageIndex + 1 
DECLARE @ItemCounter int 
SELECT @ItemCounter = Count(*)FROM dbo.Auctions WHERE AuctionStatus=1; 
WITH Auctions AS 
    (
     SELECT ROW_NUMBER() OVER 
     (PARTITION BY ItemCategoryID ORDER BY AuctionID) AS RowNumber,     
      AuctionID, 
      ItemCategoryID ,        
      @ItemCounter TotalCount       
      FROM Auctions     
      WHERE     
      AuctionStatus=1 
    ) 

    SELECT a.* FROM Auctions a 
    WHERE a.RowNumber <=3 AND a.RowNumber 
    BETWEEN @StartRow AND @EndRow - 1 

在此先感謝。

+0

如果可能的話,你可以提供樣品表數據和預期的輸出? – AnandPhadke

回答

2
a.RowNumber <=3 AND a.RowNumber BETWEEN @StartRow AND @EndRow - 1 

你對此有何期待?行號必須在開始和結束之間它必須小於或等於3?什麼是開始是4?任何高於3的結尾都是不相關的。

我要做出信仰的飛躍這裏說,對於您的問題正確地指出的要求是:

  • 每個項目類別,返回最多4個拍賣活動中,狀態= 1
  • 頁面的搜索結果

,所以你顯然有兩個計數器來考慮,一個類別中的拍賣和一個尋呼:

WITH Auctions AS 
(
    SELECT ROW_NUMBER() OVER 
    (PARTITION BY ItemCategoryID ORDER BY AuctionID) AS AuctionNumber,     
     AuctionID, 
     ItemCategoryID        
     FROM Auctions     
     WHERE     
     AuctionStatus=1 
), 
Paging as (
    SELECT ROW_NUMBER() OVER (ORDER BY ItemCategoryID, AuctionID) as RowNumber 
    , a.* 
    FROM Auctions a 
    WHERE AuctionNumber <= 3 
) 
SELECT * 
    FROM Paging 
    WHERE RowNumber BETWEEN @StartRow AND @EndRow - 1; 

性能可能會很差,但是沒有人能設計任何性能,而不涉及數據模式知識(表定義,索引等),這些缺少問題描述。

TotalRecordCount:

WITH Auctions AS 
(
    SELECT ROW_NUMBER() OVER 
    (PARTITION BY ItemCategoryID ORDER BY AuctionID) AS AuctionNumber,     
    AuctionID, 
    ItemCategoryID ,        
    FROM Auctions     
    WHERE AuctionStatus=1 
) 
SELECT @total = COUNT(*) 
FROM Auctions a 
WHERE AuctionNumber <= 3; 
+0

謝謝@Remus,我怎麼能得到「TotalRecordCount」的分頁表,而不使用group by子句,請原諒我的錯誤,因爲我在編寫sql新手。 – Gaurav

相關問題