row_number オーバーを使用して、テーブルから特定の行を選択しようとしています。ただし、SQL は「無効な列名 'ROWNUMBERS'」というエラー メッセージを表示します。誰でも私を修正できますか?
SELECT ROW_NUMBER() OVER (ORDER BY Price ASC) AS ROWNUMBERS, *
FROM Product
WHERE ROWNUMBERS BETWEEN @fromCount AND @toCount
row_number オーバーを使用して、テーブルから特定の行を選択しようとしています。ただし、SQL は「無効な列名 'ROWNUMBERS'」というエラー メッセージを表示します。誰でも私を修正できますか?
SELECT ROW_NUMBER() OVER (ORDER BY Price ASC) AS ROWNUMBERS, *
FROM Product
WHERE ROWNUMBERS BETWEEN @fromCount AND @toCount
句でエイリアス化された列を参照しようとしてWHERE
も、論理クエリ処理が行われるため機能しません。は句のWHERE
前に評価されます。したがって、が評価されるときSELECT
、列ROWNUMBERS
は存在しません。WHERE
この例で列を参照する正しい方法は次のとおりです。
SELECT a.*
FROM
(SELECT ROW_NUMBER() OVER (ORDER BY Price ASC) AS ROWNUMBERS, *
FROM Product) a
WHERE a.ROWNUMBERS BETWEEN @fromCount AND @toCount
参考までに、操作の順序は次のとおりです。
FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
報告された特定のエラーを解決する別の回答がここにあります。しかし、私はより広い問題にも取り組みたいと思っています。ここで行っていることは、結果を表示するためにページングしているように見えます。その場合、および Sql Server 2012 を使用できる場合は、より良い方法があります。見てみましょうOFFSET/FETCH
:
SELECT First Name + ' ' + Last Name
FROM Employees
ORDER BY First Name
OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY;
これは、ページ サイズが 5 のクエリの 3 ページ目を表示します。