【问题标题】:Oracle 9.2 pivot distinct valueOracle 9.2 透视不同值
【发布时间】:2016-01-25 18:57:54
【问题描述】:

pivot 函数可从 Oracle 11 获得,我将需要使用 Oracle 9.2 的类似结果。

主要论点是我需要在这样的表中旋转一些具有不同结果的值:

id      col3
1       a
1       b
--
2       a   
2       a
2       b
--
3       a
3       b
3       c  

我的结果应该是这样的

id      a       b       c
1       1       1       0
2       1       1       0
3       1       1       1

要创建“手动”枢轴,我正在使用案例/何时,但我无法理解如何获得不同的价值。

现在查询是这样的:

with t as 
    ( select 1 as id, 'a' as col1 from dual union all
      select 1 as id, 'b' from dual union all
      select 2 as id, 'a' from dual union all
      select 2 as id, 'a' from dual union all
      select 2 as id, 'b' from dual union all
      select 3 as id, 'a' from dual union all
      select 3 as id, 'b' from dual union all
      select 3 as id, 'c' from dual
)
select t.id, 
       count(case when t.col1 = 'a' then 1 end) a,
       count(case when t.col1 = 'b' then 1 end) b,
       count(case when t.col1 = 'c' then 1 end) c

这会产生正确的值,但显然它只是“计算”总 a/b/c 值而不是不同的值。

感谢支持

【问题讨论】:

    标签: oracle pivot


    【解决方案1】:

    如果我正确理解您的需求,您可以尝试以下方法;它按id 聚合并计算col3 的不同值:

    with t as 
    ( select 1 as id, 'a' as col1 from dual union all
      select 1 as id, 'b' from dual union all
      select 2 as id, 'a' from dual union all
      select 2 as id, 'a' from dual union all
      select 2 as id, 'b' from dual union all
      select 3 as id, 'a' from dual union all
      select 3 as id, 'b' from dual union all
      select 3 as id, 'c' from dual
    )
    select id,
           count(distinct decode (col1, 'a', id, null)) a,
           count(distinct decode (col1, 'b', id, null)) b,
           count(distinct decode (col1, 'c', id, null)) c
    from t
    group by id
    

    当然查询取决于col3的不同值的个数,但这和pivot是同一个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-21
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多