sql >> Base de Datos >  >> RDS >> Oracle

Operador pivote de Oracle

Obtiene un resultado así simplemente porque está emitiendo select declaración contra una tabla (su tbl tabla) que presumiblemente contiene una columna (columna de clave principal, por ejemplo) que identifica de forma única una fila y pivot El operador toma en consideración los valores de esa columna. He aquí un ejemplo sencillo:

/*assume it's your table tbl */
with tbl(unique_col, col1, col2) as(
  select 1, 'a',  'a1' from dual union all
  select 2, 'b',  'b1' from dual union all
  select 3, 'c',  'c1' from dual
)

Una consulta en dicha tabla le dará el resultado (resultado no deseado) que proporcionó en la pregunta:

select A,B 
  from tbl
pivot(
  max(col2) for col1 in ('a' as A,'b' as B)
)

Resultado:

A    B
--   --
a1   null   
null b1

Para producir el resultado deseado, debe excluir la columna con un valor único para una fila:

select A
     , B 
  from (select col1 
             , col2  /*selecting only those columns we are interested in*/
           from tbl ) 
  pivot(
    max(col2) for col1 in ('a' as A,'b' as B)
  )

Resultado:

A  B
-- --
a1 b1