顯示emp中的員工列表並按deptno排序,其中null deptno應該首先出現,然後deptno = 2的課程應該以升序顯示並休息。使用分析功能進行自定義排序
我嘗試下面的查詢與DECODE,
SELECT empno, ename, deptno
FROM emp
ORDER BY DECODE (deptno, NULL, 0, 2, 1, 3);
但是,我無法通過分析功能來實現它。
有人請幫我解決這個使用分析功能!
顯示emp中的員工列表並按deptno排序,其中null deptno應該首先出現,然後deptno = 2的課程應該以升序顯示並休息。使用分析功能進行自定義排序
我嘗試下面的查詢與DECODE,
SELECT empno, ename, deptno
FROM emp
ORDER BY DECODE (deptno, NULL, 0, 2, 1, 3);
但是,我無法通過分析功能來實現它。
有人請幫我解決這個使用分析功能!
我假設你想根據排序分配row_number()
,因爲分析函數不會「排序」表。你試過這個嗎?從記錄上來看
select e.*, rownum as seqnum
from (SELECT empno, ename, deptno
FROM emp
ORDER BY DECODE (deptno, NULL, 0, 2, 1, 3)
) e
,用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 ;
即使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;