我正在使用case函数突出显示系统中正在运行的任务的当前情况,其中任务状态为“完成”,“失败”或“正在等待”。
我将case函数用于Completed和Failed,因为它只是单行命令。但是对于Waiting状态,我想在case函数中使用count建立条件。
当前,我正在使用等待状态的语法
CASE WHEN task_Status='Waiting'
and Count(Task_Status) > 30
THEN "More task are in Waiting State"
但是计数功能给我错误,请求帮助。预先感谢。
答案 0 :(得分:0)
如果您发布示例数据,那就太好了。正如您没有看到以下基于Scott架构的示例一样。我不是在您的status
栏中,而是在每个部门中统计职员。
SQL> select deptno, ename, job from emp order by deptno, job;
DEPTNO ENAME JOB
---------- ---------- ---------
10 MILLER CLERK --> 1 clerk in department 10
10 CLARK MANAGER
10 KING PRESIDENT
20 SCOTT ANALYST
20 FORD ANALYST
20 ADAMS CLERK --> 2 clerks in
20 SMITH CLERK --> department 20
20 JONES MANAGER
30 JAMES CLERK --> 1 clerk in department 30
30 BLAKE MANAGER
30 MARTIN SALESMAN
30 WARD SALESMAN
30 ALLEN SALESMAN
30 TURNER SALESMAN
14 rows selected.
SQL>
这是您现在要执行的操作:
SQL> select deptno,
2 case when job = 'CLERK' and count(*) > 1 then
3 'More than a single clerk in department'
4 else
5 'Only one clerk in department'
6 end status
7 from emp
8 group by deptno;
case when job = 'CLERK' and count(*) > 1 then
*
ERROR at line 2:
ORA-00979: not a GROUP BY expression
SQL>
如果我们包含job
列,错误就会消失,但是-结果不是我们期望的:
SQL> select deptno,
2 case when job = 'CLERK' and count(*) > 1 then
3 'More than a single clerk in department'
4 else
5 'Only one clerk in department'
6 end status
7 from emp
8 group by deptno, job
9 order by deptno;
DEPTNO STATUS
---------- --------------------------------------
10 Only one clerk in department
10 Only one clerk in department
10 Only one clerk in department
20 Only one clerk in department
20 More than a single clerk in department
20 Only one clerk in department
30 Only one clerk in department
30 Only one clerk in department
30 Only one clerk in department
9 rows selected.
SQL>
该怎么办?不要count
-sum
!
SQL> select
2 deptno,
3 case when sum(case when job = 'CLERK' then 1 else 0 end) > 1 then
4 'More than a single clerk in department'
5 else
6 'Only one clerk in department'
7 end status
8 from emp
9 group by deptno
10 order by deptno;
DEPTNO STATUS
---------- --------------------------------------
10 Only one clerk in department
20 More than a single clerk in department
30 Only one clerk in department
SQL>
您的情况应该是
case when sum(case when task_status = 'Waiting' then 1 else 0 end) > 30 then
'More tasks are in Waiting State'
end
请注意,字符串应该用单而不是双引号引起来。