質問
SELECT instmax
FROM
(SELECT instmax ,rownum r
FROM
( SELECT instmax FROM pswlinstmax ORDER BY instmax DESC NULLS LAST
)
WHERE r = 2
);
実行後、このエラーが発生しています。
ORA-00904: "R": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 39 Column: 8
なぜこのエラーが発生しているのですか?
解決
エイリアスは、同じクエリの句ではサポートされていないためです。代わりに、次のようにクエリを書きます
SELECT instmax
FROM
(SELECT instmax ,rownum r
FROM
( SELECT instmax FROM pswlinstmax ORDER BY instmax DESC NULLS LAST
)
) WHERE r = 2;
他のヒント
まず第一に、あなたは rownum = 2
調子。を指定して、最初の2行を選択できます where rownum < 3
状態、またはあなたはそれを別のクエリに包み、あなたを参照することができます rownum
あそこからの普通のコラムとして。
その後、列エイリアスを参照することはできません where
サブクエリの条項このエイリアスに割り当てられました。 1つのレベルを上げることができます:
SELECT instmax
FROM (SELECT instmax, rownum r
FROM (SELECT instmax
FROM pswlinstmax
ORDER BY instmax DESC NULLS LAST)
)
WHERE r = 2;
または、この参照を避けてください
-- this will return first two rows
SELECT instmax
FROM (SELECT instmax, rownum r
FROM (SELECT instmax
FROM pswlinstmax
ORDER BY instmax DESC NULLS LAST)
WHERE rownum < 3
);
そのような句の列エイリアスを参照することはできません。
Rownumもそのように仕事をやめません。このようなことを試してみてください:
select instmax from
(
SELECT instmax, row_number(instmax) order by (instmax desc nulls last) rownumber
FROM pswlinstmax
)
where rownumber = 2;
@amitは正しいです。 Oracleは最初にWHERE条件を評価するため、次に選択します。サブセレクトを行う必要があります。
それ以外の:
SELECT instmax
FROM(
SELECT instmax ,rownum r
FROM (SELECT instmax FROM pswlinstmax ORDER BY instmax DESC NULLS LAST)
WHERE r = 2
);
以下をせよ:
SELECT instmax
FROM ( SELECT instmax ,rownum r
FROM ( SELECT instmax FROM pswlinstmax ORDER BY instmax DESC NULLS LAST )
)
WHERE r = 2
;
... rはここで句に見えるようになりました。この質問は、この質問です。
取得する一般的な方法では、上位5人の高給の従業員が言えます。
SELECT ename,sal FROM emp
WHERE rownum <= 5
ORDER BY sal DESC;
所属していません StackOverflow