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