通过在Oracle中分组一列从表中选择数据
Posted
技术标签:
【中文标题】通过在Oracle中分组一列从表中选择数据【英文标题】:Selecting the data from a table by grouping one column in Oracle 【发布时间】:2020-01-10 09:44:01 【问题描述】:我有一张表T1如下图
ID PASSED FAILED PASSED_PERCENTAGE FAILED_PERCENTAGE
-- ------ ------ ----------------- -----------------
1 380 172 50 23
我需要一个 SQL 查询,它会给出如下输出
DESC ID TOTAL PERCENTAGE
---- -- ----- ----------
PASSED 1 380 50
FAILED 1 172 23
注意:表 T1 将始终只有一行,而列 ID 将始终具有恒定值 '1' 谁能帮我解决这个问题。非常感谢。
【问题讨论】:
【参考方案1】:使用union all
select 'Passed' as 'desc', id, PASSED as total,PASSED_PERCENTAGE as PERCENTAGE
from tablename
union all
select 'Falied', id, Failed,FAILED_PERCENTAGE
from tablename
【讨论】:
你可能需要引号包裹DESC
-> "DESC"
没有它你可能会得到一个错误。小提琴with 和without【参考方案2】:
Oracle 12C 支持横向连接,这是对子查询的改进(表只扫描一次):
select x.*
from t cross join lateral
(select 'Passed' as which, id, passed as total, passed_percentage as percentage
from dual
union all
select 'Failed' as which, id, failed as total, failed_percentage as percentage
from dual
) x;
当然,对于这个示例数据样本,扫描不是性能问题——除非表确实是一个相当复杂的视图。
但是,横向连接非常强大,值得学习。
【讨论】:
以上是关于通过在Oracle中分组一列从表中选择数据的主要内容,如果未能解决你的问题,请参考以下文章