一起使用行数据透视

时间:2019-10-16 06:07:02

标签: oracle oracle11g

我的原始查询是

select element1_name, element1_value, element2_name, element2_value
  from reports r

我想将element_name,element_value行转换为列,以便编写此查询

select *
  from (select *
          from (select element1_name,
                       element1_value,
                       element2_name,
                       element2_value
                  from reports r)
        pivot(max(element1_value) as one
           for element1_name in('C' as C, 'Si' as SI, 'P' as P)))
pivot(max(element2_value) as tow
   for element2_name in('C' as C, 'Si' as SI, 'P' as P))

有一种方法可以将两个数据透视表一起编写而无需两个子查询 Select * (...) pivot element1,pivot element2

问题:如何优化此查询?

1 个答案:

答案 0 :(得分:2)

您可以在下面的查询中尝试-

select *
from (select element1_name,
             element1_value,
             element2_name,
             element2_value
      from reports) AS R
pivot(max(element1_value) for element1_name in('C' as C, 'Si' as SI, 'P' as P)) as PV1
pivot(max(element2_value) for element2_name in('C' as C, 'Si' as SI, 'P' as P)) as PV2;