显示emp的雇员列表,并由deptno命令,其中null deptno应首先出现,然后deptno = 2的课程应该出现并按升序排列。
我尝试使用DECODE进行以下查询,
SELECT empno, ename, deptno
FROM emp
ORDER BY DECODE (deptno, NULL, 0, 2, 1, 3);
但是,我无法通过分析功能实现它。
有人请帮助我使用分析功能解决这个问题!!
答案 0 :(得分:0)
我假设您要根据排序分配row_number()
,因为分析函数没有" order"表。你试过这个吗?
SELECT empno, ename, deptno,
row_number() over (ORDER BY DECODE (deptno, NULL, 0, 2, 1, 3) as seqnum
FROM emp ;
您也可以在没有分析功能的情况下执行此操作:
select e.*, rownum as seqnum
from (SELECT empno, ename, deptno
FROM emp
ORDER BY DECODE (deptno, NULL, 0, 2, 1, 3)
) e
答案 1 :(得分:0)
仅为记录,用CASE替换DECODE(对我来说更容易阅读)。 并且imho要按照升序“休息”,你需要将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 ;
答案 2 :(得分:0)
甚至RANK()或DENSE_RANK()也可用作分析函数, ORDER BY子句应该包含另一个venue_id来对DECODE的else选项进行排序。
SELECT course_id,course_title,venue_id 来自ha_courses ORDER BY ROW_NUMBER()OVER(按DECODE排序(venue_id,NULL,0,2,1,3)), venue_id;