【问题标题】:Case function with the count condition具有计数条件的案例函数
【发布时间】:2020-09-13 16:38:46
【问题描述】:

我正在使用 case 函数来突出显示我的任务在我的系统中运行的当前场景,其中任务状态为 Completed、Failed 或 Waiting。

我得到了用于 Completed 和 Failed 的 case 函数,因为它只是一个单行命令。但是对于 Waiting 状态,我想用 case 函数中的 count 来构建条件。

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

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

但是计数功能给了我错误,请求帮助。提前致谢。

【问题讨论】:

  • 很简单。首先在 cte 或内联视图中进行计数。然后申请您的案例。
  • 可能你需要解析窗函数:count(*) over() 。具体参数取决于您的需求

标签: sql oracle count


【解决方案1】:

如果您发布示例数据会很好。由于您没有查看基于 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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    相关资源
    最近更新 更多