0

我有一个表格,其中的行在特定日期内对某个类别有多次点击。像这样:

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)

但是我得到一个'Column WebClicksCategory.Count 在选择列表中无效,因为它既不包含在聚合函数也不包含在 GROUP BY 子句中'错误。是否有另一种方法对结果进行分页?

4

1 回答 1

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)
于 2012-04-17T12:03:28.407 回答