2016-06-10 27 views
2
SELECT 

    someColumnA, 
    someColumnB, 

FROM someTable 

[A COUPLE JOINS HERE] 

[A NICE WHERE STATEMENT] 

ORDER BY someColumnA DESC 

假設這個查詢返回1000個結果。當我申請一個DISTINCT它會凝結下來,讓我們說300.如何在分頁之前獲得不同行總數?

我想要做的只是返回10個結果使用分頁行爲preivew給我的用戶,我想包括DISTINCT的數量總數行。如果我在select中添加一個帶有計數的分頁,它將返回「不同」之前的行數。

這裏是最終的查詢我到目前爲止

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

您可以嘗試使用GROUP BY而不是不同

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

FROM someTable 

[A COUPLE JOINS HERE] 

[A NICE WHERE STATEMENT] 

GROUP BY someColumnA, someColumnB 
ORDER BY someColumnA DESC 

OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY 
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 

希望,它可以幫助你。