作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
我是一名优秀的程序员,十分优秀!