【问题标题】:Selecting the data from a table by grouping one column in Oracle通过在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' 谁能帮我解决这个问题。非常感谢。

【问题讨论】:

    标签: sql oracle


    【解决方案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" 没有它你可能会得到一个错误。小提琴withwithout
    【解决方案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;
    

    当然,对于这个示例数据样本,扫描不是性能问题——除非表确实是一个相当复杂的视图。

    但是,横向连接非常强大,值得学习。

    【讨论】:

      猜你喜欢
      • 2021-05-13
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      • 2018-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多