如何在分页之前获得总不同行的计数?

时间:2016-06-10 18:30:01

标签: sql sql-server

SELECT

    someColumnA,
    someColumnB,

FROM someTable

[A COUPLE JOINS HERE]

[A NICE WHERE STATEMENT]

ORDER BY someColumnA DESC

我们假设此查询返回1000个结果。当我应用DISTINCT时,它会缩小,让我们说300。

我想要做的只是使用分页返回10个结果来对我的用户执行preivew,并且我想要包括DISTINCT ROWS的总数。如果我在select中添加一个带有计数的分页,它将返回DISTINCT之前的行数。

这是我到目前为止的最终查询

SELECT DISTINCT

    count(*) OVER() as total,
    someColumnA,
    someColumnB,

FROM someTable

[A COUPLE JOINS HERE]

[A NICE WHERE STATEMENT]

ORDER BY someColumnA DESC

OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY

总计= 1000而不是我想要的300。有没有一种简单的方法来实现这一点,还是我不得不求助于使用子选择来获取所有300个不同的行,然后对其进行计数并获取前10个?

2 个答案:

答案 0 :(得分:2)

您可以尝试使用group by而不是distinct

Top.largestPerKey(n)

答案 1 :(得分:2)

您可以使用 CTE

;WITH CTE_Distinct
AS
(
   SELECT DISTINCT
      someColumnA,
      someColumnB
  FROM someTable
  [A COUPLE JOINS HERE]
  [A NICE WHERE STATEMENT]
)

SELECT
    count(*) OVER() as total, 
    someColumnA,
    someColumnB 
FROM CTE_Distinct
ORDER BY someColumnA DESC
OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY

希望,它会帮助你。