重复的总行数超过

时间:2019-01-03 20:32:41

标签: sql sql-server tsql

我在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

1 个答案:

答案 0 :(得分:1)

您的count(*)不适用于返回的不同值。

declare @table table (i int)
insert into @table
values
(1),
(1),
(1),
(1)

select distinct count(*) over() from @table

这就是为什么它们被称为窗口函数。然后,窗口函数将为窗口中的每一行计算一个值。由于您没有使用partition byrow or range子句来限制窗口中的行,因此它将全部计算在内。您可以使用子查询或其他功能。取决于您要如何处理它。