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

したがって、2 つの日付間の各カテゴリの合計数を表示するには、次のようにします。

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 に答える