我正在尝试创建一个列,记录前一行中专业(医生,在这种情况下)发生的次数。显然,下面的代码不起作用。
var row_d number
exec :row_d:=0
select case
when occupation='Doctor' then (row_d:=row_d+1)
end row_number
from occupations
;
由于我不熟悉编码,因此在这种情况下理解Oracle处理变量的方式比我有一段代码可以做我想做的更重要。
最后,我的问题是:你如何更新Oracle中变量的值,并且有没有办法在Case语句中做到这一点?
答案 0 :(得分:1)
以下是如何获得所需的结果。请注意,不涉及变量。 SQL是一种声明性语言:您的代码仅描述您想要的结果,代码不是由特定的指令组成,告诉计算机如何获得您想要的结果。
我在标准的SCOTT模式中使用EMP表;你可以根据自己的需要进行调整。
select empno, ename, job,
count(case when job = 'MANAGER' then 1 end) over (order by empno) mgr_running_ct
from scott.emp
order by empno
;
EMPNO ENAME JOB MGR_RUNNING_CT
---------- ---------- --------- --------------
7369 SMITH CLERK 0
7499 ALLEN SALESMAN 0
7521 WARD SALESMAN 0
7566 JONES MANAGER 1
7654 MARTIN SALESMAN 1
7698 BLAKE MANAGER 2
7782 CLARK MANAGER 3
7788 SCOTT ANALYST 3
7839 KING PRESIDENT 3
7844 TURNER SALESMAN 3
7876 ADAMS CLERK 3
7900 JAMES CLERK 3
7902 FORD ANALYST 3
7934 MILLER CLERK 3