SQL中的分页和分组

SQL中的分页和分组,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在尝试编写一个SQL脚本,但得到了意想不到的结果。@TotalResults给了我6条记录,而我知道返回了33条记录 代码如下: SELECT @TotalPages = CEILING(COUNT(a.MemberID)/@PageSize), @TotalResults = COUNT(a.MemberID) FROM Member a INNER JOIN MemberBusinessCat b ON b.MemberID = a.MemberID INNER JOIN Busines

我正在尝试编写一个SQL脚本,但得到了意想不到的结果。@TotalResults给了我6条记录,而我知道返回了33条记录

代码如下:

SELECT @TotalPages = CEILING(COUNT(a.MemberID)/@PageSize), @TotalResults = COUNT(a.MemberID)
FROM Member a
INNER JOIN MemberBusinessCat b ON b.MemberID = a.MemberID
INNER JOIN BusinessCat c ON c.BusinessCatID = b.BusinessCatID
WHERE a.SystemID = @SystemID
AND c.CategoryName LIKE '%' + @SearchStr + '%'
AND ( @ShowUnclaimed != 'N' 
  OR ( a.Claimed = 'Y' AND a.SBIcon = 'N' )
)
AND a.Viewable = 'Y'
GROUP BY a.MemberID, a.CreateDate, a.UserName, a.PrCity, a.MemberDisplayName, a.PrStateID, a.PrPhone, a.ShortDesc, a.PrCountryID;

WITH CoalPrepCategorySearch AS
(
     SELECT ROW_NUMBER() OVER(ORDER BY a.MemberDisplayName ASC) AS RowNum,
     a.MemberID,
     a.UserName,
     a.PrCity,
     a.PrStateID,
     a.PrPhone,
     @TotalPages AS TotalPages,
     a.MemberDisplayName AS DisplayName,
     a.ShortDesc,
     @TotalResults AS TotalResults,
     a.PrCountryID
     FROM Member a
     INNER JOIN MemberBusinessCat b ON b.MemberID = a.MemberID
     INNER JOIN BusinessCat c ON c.BusinessCatID = b.BusinessCatID
     WHERE a.SystemID = @SystemID
     AND c.CategoryName LIKE '%' + @SearchStr + '%'
     AND ( @ShowUnclaimed != 'N' 
       OR ( a.Claimed = 'Y' AND a.SBIcon = 'N' )
     )
     AND a.Viewable = 'Y'
     GROUP BY a.MemberID, a.CreateDate, a.UserName, a.PrCity, a.MemberDisplayName, a.PrStateID, a.PrPhone, a.ShortDesc, a.PrCountryID
)
SELECT * 
FROM CoalPrepCategorySearch
WHERE RowNum BETWEEN (@PG - 1) * @PageSize + 1 AND @PG * @PageSize
ORDER BY DisplayName ASC
我很确定这与分组有关。如果是,那么我如何才能得到全部结果?我做错了什么

非常感谢


新杰克

这可能对你有帮助-

;WITH cte AS 
(
    SELECT a.*
    FROM dbo.Member a
    JOIN dbo.MemberBusinessCat b ON b.MemberID = a.MemberID
    JOIN dbo.BusinessCat c ON c.BusinessCatID = b.BusinessCatID
    WHERE a.SystemID = @SystemID
        AND c.CategoryName LIKE '%' + @SearchStr + '%'
        AND a.Viewable = 'Y'
        AND (
                  @ShowUnclaimed != 'N' 
                OR 
                  a.Claimed + a.SBIcon = 'YN' 
        )
), CoalPrepCategorySearch AS
(
     SELECT 
         ROW_NUMBER() OVER(ORDER BY a.MemberDisplayName ASC) AS RowNum,
         a.MemberID,
         a.UserName,
         a.PrCity,
         a.PrStateID,
         a.PrPhone,
         a.MemberDisplayName AS DisplayName,
         a.ShortDesc,
         a.PrCountryID
    FROM (
        SELECT DISTINCT 
            a.MemberDisplayName,
            a.MemberID,
            a.UserName,
            a.PrCity,
            a.PrStateID,
            a.PrPhone,
            a.ShortDesc,
            a.PrCountryID
        FROM cte a
    ) a
)
SELECT *
FROM CoalPrepCategorySearch t
CROSS JOIN (
    SELECT 
          TotalPages = CEILING(COUNT(t2.MemberID) / @PageSize)
        , TotalResults = COUNT(t2.MemberID) 
    FROM cte t2
    GROUP BY t2.MemberID
) t2
WHERE RowNum BETWEEN (@PG - 1) * @PageSize + 1 AND @PG * @PageSize --??
ORDER BY t.DisplayName