加入收藏 | 设为首页 | 会员中心 | 我要投稿 51站长网 (https://www.51zhanzhang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
站内搜索:
当前位置: 首页 > 站长百科 > 正文

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

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

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

(编辑:ASP站长)

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

    相关内容
    未处理完善
      无相关信息
    未处理完善