案例功能与计数条件

时间:2020-09-13 16:38:46

标签: sql oracle count

我正在使用case函数突出显示系统中正在运行的任务的当前情况,其中任务状态为“完成”,“失败”或“正在等待”。

我将case函数用于Completed和Failed,因为它只是单行命令。但是对于Waiting状态,我想在case函数中使用count建立条件。

当前,我正在使用等待状态的语法

CASE WHEN     task_Status='Waiting' 
          and Count(Task_Status) > 30 
     THEN "More task are in Waiting State" 

但是计数功能给我错误,请求帮助。预先感谢。

1 个答案:

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

请注意,字符串应该用而不是双引号引起来。

相关问题