2013-08-30 85 views
0

顯示emp中的員工列表並按deptno排序,其中null deptno應該首先出現,然後deptno = 2的課程應該以升序顯示並休息。使用分析功能進行自定義排序

我嘗試下面的查詢與DECODE,

SELECT empno, ename, deptno 
    FROM emp 
ORDER BY DECODE (deptno, NULL, 0, 2, 1, 3); 

但是,我無法通過分析功能來實現它。

有人請幫我解決這個使用分析功能!

回答

0

我假設你想根據排序分配row_number(),因爲分析函數不會「排序」表。你試過這個嗎?從記錄上來看

select e.*, rownum as seqnum 
from (SELECT empno, ename, deptno 
     FROM emp 
     ORDER BY DECODE (deptno, NULL, 0, 2, 1, 3) 
    ) e 
0

,用CASE(更易於閱讀對我來說)代替DECODE:

SELECT empno, ename, deptno, 
     row_number() over (ORDER BY DECODE (deptno, NULL, 0, 2, 1, 3) as seqnum 
FROM emp ; 

你也可以做到這一點沒有分析功能在所有。 恕我直言,以獲得您所需要的DEPTNO添加到ELSE的「升序排列休息」:

SELECT empno, ename, deptno, 
    row_number() 
    over (ORDER BY case when deptno is NULL then -1 
         when deptno = 2 then 0 
         else deptno 
        end) as seqnum 
FROM emp ; 
0

即使RANK()或DENSE_RANK()可以被用作分析功能可按, ORDER BY子句中應該包含另一個venue_id來排序DECODE的其他選項。

SELECT COURSE_ID,COURSE_TITLE,venue_id FROM ha_courses ORDER BY ROW_NUMBER()OVER(ORDER BY DECODE(venue_id,NULL,0,2,1,3)), venue_id;

相關問題