我正在尝试编写一个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
我很确定它与分组有关。如果是,那我怎样才能获得总结果?我做错了什么?
非常感谢提前。
neojakey
答案 0 :(得分:2)
这可能对你有所帮助 -
;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