更新oracle Case语句

时间:2018-03-29 01:44:03

标签: sql oracle variables

我正在尝试创建一个列,记录前一行中专业(医生,在这种情况下)发生的次数。显然,下面的代码不起作用。

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语句中做到这一点?

1 个答案:

答案 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