加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱故事小小网_铜陵站长网 (http://www.0562zz.com/)- 视频终端、云渲染、应用安全、数据安全、安全管理!
当前位置: 首页 > 百科 > 正文

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

发布时间:2021-01-08 05:49:49 所属栏目:百科 来源:网络整理
导读:我正在使用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,FA

我正在使用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,则不会执行其他两个检查(类似的逻辑适用于每个状态).

(编辑:我爱故事小小网_铜陵站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读