2017-04-12 51 views
0

我有一個表emp(ename,eid,did,sal,sex),其中column是外鍵與另一個表部門(did,dname)。rownum = 5返回沒有數據,但表中有10行

我想得到公司的第n個人以及人的細節。 我執行以下查詢(我的表有10行)

SELECT rownum,vi.* FROM 
    (SELECT * FROM emp ORDER BY sal desc) vi 
    WHERE ROWNUM >5; 

當我執行的rownum> 5或ROWNUM = 5獲得「無數據」 但如果我執行的rownum < 5然後我得到顯示4行。

。我想要數據,當我做rownum = n

+0

它不工作,因爲:第一行假定爲1'ROWNUM'既然你'WHERE'子句'ROWNUM> 5'然後這減少到'1> 5'並且該行被丟棄。隨後的行將針對1的「ROWNUM」進行測試(因爲前一行不再在輸出中,現在不需要行號),這將再次通過測試並被丟棄。重複,廣告噁心和所有行都會使'WHERE'子句過濾器失效並被丟棄。你需要3級嵌套查詢 - 內部一個命令,中間分配'ROWNUM'僞coulmn和它的外部過濾器。 – MT0

回答

0

你可以試試嗎?

SELECT * FROM 
(SELECT ROWNUM AS X, vi.* 
    FROM (SELECT * FROM emp ORDER BY sal desc) vi 
) B 
WHERE X>5 
; 
0

假設你只想要第5行,你可以試試這個:

select * 
from (
    select rownum as rn, 
     vi.* 
    from (
     select * 
     from emp 
     order by sal desc 
     ) vi 
    where ROWNUM <= 5 
    ) t 
where rn = 5; 

或使用窗口功能:

select * 
from (
    select row_number() over (order by sal desc) as rn, 
     vi.* 
    from emp vi 
    ) t 
where rn = 5; 

如果您正在使用12C +,你可以使用Top N查詢:

select * 
from emp 
order by sal desc 
offset 4 rows 
fetch first 1 row only; 
相關問題