gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:51:21 28 4
gpt4 key购买 nike

我正在使用 ORACLE 数据库,并且正在尝试为以下要求创建 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”,我想设置为最终结果为小组的“工作”

  • 如果任何条目为“失败”,则结果为“失败”

  • 如果任何条目为“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 - 如何在使用 GROUP BY CLAUSE 的 SQL 查询中插入 if else 阶梯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37202848/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com