エンディング を除いて、同じスコープでエイリアスを名前で参照することはできませんORDER BY
(同じスコープのウィンドウ関数内では無効な参照です)。
まったく同じ結果を得るには、次のように拡張する必要がある場合があります(わかりやすくするためにネストスコープ)。
SELECT c, d FROM
(
SELECT c, d, ROW_NUMBER() OVER (ORDER BY c) AS row FROM
(
SELECT d = [date], c = COUNT(id) FROM dbo.table GROUP BY [date]
) AS x
) AS y WHERE row >= 25 AND row < 35;
これは、モハンの答えに従って少し短くすることができます。
SELECT c, d FROM
(
SELECT COUNT(id), [date], ROW_NUMBER() OVER (ORDER BY COUNT(id))
FROM dbo.table GROUP BY [date]
) AS y(c, d, row)
WHERE row >= 25 AND row < 35;
SQL Server 2012では、 OFFSET / FETCHを使用するとはるかに簡単になります。これは、以前の構文に近いものですが、実際には、独自のブードゥーではなく、ANSI互換の構文を使用しています。
SELECT c = COUNT(id), d = [date]
FROM dbo.table GROUP BY [date]
ORDER BY COUNT(id)
OFFSET 25 ROWS FETCH NEXT 10 ROWS ONLY;
私は2010年にこの機能についてブログを書きました(そこにもたくさんの良いコメントがあります)、そしておそらくいくつかの深刻なパフォーマンステストを行うために時間を費やす必要があります。
そして私は@ajonに同意します-あなたの実際のテーブル、列、クエリがこのような予約語を乱用しないことを願っています。