2012-04-17 15 views
0

我有一個表格,其中有一行在特定的一天中有一個類別的點擊次數。就像這樣:帶有求和功能的MSSQL分頁結果

ID CatID Date     Count 
1 DADB 2011-11-04 00:00:00  3 
2 DCBC 2011-11-04 00:00:00  9 
3 DADH 2011-11-04 00:00:00  9 

因此顯示的總數爲每兩個日期之間的類別,我會做這樣的事情:

SELECT WebClicksCategory.CatID, sum(WebClicksCategory.Count) as Count 
FROM [Web].[dbo].[WebClicksCategory] 
WHERE Date >= '2011-04-17 00:00:00.000' 
AND Date <= '2012-04-17 00:00:00.000' 
GROUP BY WebClicksCategory.CatID 
ORDER BY Count desc 

但是如果我想分頁這些結果,並做一些像這樣的:

SELECT * FROM 
(SELECT row_number() OVER (order by Count) AS rownum, 
WebClicksCategory.CatID, sum(WebClicksCategory.Count) as Count 
FROM [Web].[dbo].[WebClicksCategory] 
WHERE Date >= '2011-04-17 00:00:00.000' 
AND Date <= '2012-04-17 00:00:00.000' 
GROUP BY WebClicksCategory.CatID 
) AS A 
WHERE A.rownum BETWEEN (50) AND (200) 

,但我得到了「因爲它不是在聚合函數或GROUP BY子句中的列所含的WebClicksCategory.Count在選擇列表中無效」呃ROR。是否有另一種方法來分類結果?

回答

0

的問題是不是包括在總的,但實際上是從包括它的OVER子句中:

(SELECT row_number() OVER (order by Count) AS rownum, 

所以我會建議是:

SELECT rownum, CatID, Count FROM 
(SELECT row_number() OVER (order by Count) AS rownum, CatID, Count 
FROM 
    (SELECT WebClicksCategory.CatID, sum(WebClicksCategory.Count) as Count 
    FROM [Web].[dbo].[WebClicksCategory] 
    WHERE Date >= '2011-04-17 00:00:00.000' 
    AND Date <= '2012-04-17 00:00:00.000' 
    GROUP BY WebClicksCategory.CatID 
) AS B 
) AS A 
WHERE A.rownum BETWEEN (50) AND (200) 
+0

真棒,感謝有排序它。 – b3n 2012-04-17 13:08:44