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个?
答案 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
希望,它会帮助你。