我在SQL Server中使用“ COUNT(*)OVER()”函数来获取分页的总行数。我使用distinct关键字,但是它得到重复行的行数。
总行数通常为772,但是查询返回1024,因为存在重复行。
SELECT DISTINCT
ss.ProdSmartId,
p.ProdId,
ProdName,
TotalRowCount = COUNT(*) OVER()
FROM
ProdSmartSorts ss
JOIN
dbo.Products p ON ss.ProdId = p.ProdId AND p.IsDeleted = 0 AND p.ProdStatus = 1
JOIN
Users u ON p.UserId = u.Id
LEFT JOIN
Pictures pic ON pic.ProdId = p.ProdId AND pic.IsCover = 1
ORDER BY
ss.ProdSmartId
OFFSET 1 ROWS FETCH NEXT 10000 ROWS ONLY
答案 0 :(得分:1)
您的count(*)
不适用于返回的不同值。
declare @table table (i int)
insert into @table
values
(1),
(1),
(1),
(1)
select distinct count(*) over() from @table
这就是为什么它们被称为窗口函数。然后,窗口函数将为窗口中的每一行计算一个值。由于您没有使用partition by
或row or range
子句来限制窗口中的行,因此它将全部计算在内。您可以使用子查询或其他功能。取决于您要如何处理它。