2017-10-26 16 views
1

各部門で最高2つの給与を取得しようとしていました。しかし、私はエラーが発生しています!助けてください、私は感謝します、ありがとう。ORA-00923:FROMキーワードが見つかりませんでした(部署別に最高2給与を取得してください)

CREATE TABLE emp_h ( Dept varchar(100), Emp varchar(100), Sal numeric(18,2)) 

値はこの表の下に挿入されます。

I出力(学部賢明トップ2最高給与は)

Dept Emp Sal 
---------------------------- 
Comp C 10000 
Comp D 9000 
Elec R 11000 
Elec Q 10000 
Eng  AA 15000 
Eng  BB 7000 

今、私は賢い最高2給与に各部門を取得するには、このクエリを実行したい

SELECT * FROM emp_h 

    DEPT EMP SAL 
    Comp A 6000 
    Comp B 7000 
    Comp C 10000 
    Comp D 9000 
    Elec P 2000 
    Elec Q 10000 
    Elec R 11000 
    Eng  AA 15000 
    Eng  BB 2000 
    Eng  BB 7000 
    Eng  BB 3000 

SELECT * FROM(SELECT RANK() OVER (PARTITION BY DEPT ORDER BY SAL DESC) AS 'Rank', * FROM emp_h) AS A WHERE RANK <= 2 

結果:

ORA-00923: FROM keyword not found where expected 
00923. 00000 - "FROM keyword not found where expected" 
*Cause:  
*Action: 
Error at Line: 25 Column: 61 
+0

あなたは 'rank()...'関数の後に '*'を使うことはできますか? – cowbert

+0

そうだと思います。私の誤りを訂正してください。 –

+0

'、*'を削除すると動作しますか?それがうまくいくなら、 'Rank'カラムの前に' * 'を使ってみてください。そうでなければ、emp_hの列を明示的に参照する必要があります。 – cowbert

答えて

-1

行に他の列がある場合は、*を修飾することをお薦めします。だからこれを試してみてください:

SELECT e.* 
FROM (SELECT RANK() OVER (PARTITION BY DEPT ORDER BY SAL DESC) AS rnk, e.* 
     FROM emp_h e 
    ) e 
WHERE rnk <= 2; 
+0

! *原因: 処置:ラインで エラー:31カラム: - 'ORA-00904::: "E" "無効な識別子%s" は無効な識別子 00904. 00000申し訳ありませんがこれは私が取得しています結果です。!。:3' –

+0

あなたが 'emp_hを探している*'ここ – cowbert

+0

は申し訳ありませんが、私は* 'emp_hを使用して走った'しかし、ここでの結果である 'ORA-00904: "eMP_H":無効な識別子 00904. 00000 - 」 %s:無効な識別子 " *原因: * Actiオン: 行のエラー:30列:78' –

関連する問題