oracle – 如何在使用GROUP BY CLAUSE的SQL查询中插入if else梯形图

前端之家收集整理的这篇文章主要介绍了oracle – 如何在使用GROUP BY CLAUSE的SQL查询中插入if else梯形图前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用ORACLE db,我正在尝试为以下要求创建SQL查询.

以下是我的快照:

ID  STATUS
----------
 1     WORKING
 1     QUEUING
 1     SLEEPING
 2     Failed
 2     SLEEPING
 2     SLEEPING
 3     QUEUING
 3     IDLE

预期产量:

1  WORKING
 2  Failed
 3  QUEUING

状态可以是WORKING,QUEUING,Failed,SLEEPING

我想在SQL查询中插入以下条件,这些条件在首选项顺序中列出:

>如果组中的任何条目包含’WORKING’,我想设置final
结果为该组的“工作”
>如果任何条目为’Failed’,则结果为’Failed
>如果任何条目是’QUEUING’,那么结果是’QUEUING’;
>默认’空闲’.

解决方法

与子查询结合使用的数据透视查询应该可以为您提供所需内容

SELECT t.ID,CASE WHEN t.Working > 0 THEN 'WORKING'
         WHEN t.Failed > 0  THEN 'Failed'
         WHEN t.Queuing > 0 THEN 'QUEUING'
    ELSE 'IDLE'
    END AS STATUS
FROM
(
    SELECT ID,SUM(CASE WHEN STATUS = 'WORKING' THEN 1 ELSE 0 END) AS Working,SUM(CASE WHEN STATUS = 'Failed'  THEN 1 ELSE 0 END) AS Failed,SUM(CASE WHEN STATUS = 'QUEUING' THEN 1 ELSE 0 END) AS Queuing
    FROM yourTable
    GROUP BY ID
) t

外部CASE表达式正确表示首选项的原因是因为Oracle总是执行short circuit evaluation.这意味着如果查询遇到与WORKING匹配的ID,则不会执行其他两个检查(类似的逻辑适用于每个状态).

猜你在找的Oracle相关文章