ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

初心者の為のSQLコミュの行番号を振って 特定の行をwhere句で抽出したいのですが

  • mixiチェック
  • このエントリーをはてなブックマークに追加
環境はDB2 Express-Cです。

行番号を振って、
特定の行をwhere句で抽出したいのですが、
エラーが出てうまくいきません。

<code>
select ROW_NUMBER() OVER(ORDER BY ID) AS ROWNUM from (select
        s.ID
    from staff as s
    union all
    select
        s2.ID
    from staffg as s2
) as M
where ROWNUM >= 5
AND ROWNUM <= 10
;
</code>

以下のようにエラーがでてしまいます。

SQL0206N "ROWNUM" is not valid in the context where it is used.
SQLSTATE=42703

where句でROWNUMが参照できていないのが原因だと思いますが、
どうすれば、where句でROWNUMを参照できるでしょうか?
何卒よろしくお願いします。

コメント(2)

SQLはWHERE句の後にSELECT句を実行するので、WHERE句ではOLAP関数は使えません。ROW_NUMBER() OVER(ORDER BY ID) AS ROWNUM を含んだサブクエリを更に作る必要があります。
> かんとみ様

明快なご回答ありがとうございます。
アドバイスを元に以下のSQLを試したところ
目的を果たすことができました。

<code>
select ROWNUM from(
select ROW_NUMBER() OVER(ORDER BY ID) AS ROWNUM from (select
        ID
    from staff
    union all
    select
        ID
    from staffg
))
where ROWNUM >= 5
and ROWNUM <= 10
;
</code>

以下は実行結果

ROWNUM
---------------
5
6
7
8
9
10

マニュアルを読んで出直して参ります。
本当に助かりました。 m(_ _)m

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

初心者の為のSQL 更新情報

初心者の為のSQLのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング