Vous obtenez la sortie comme ça simplement parce que vous émettez select
déclaration contre une table (votre tbl
table) qui contient vraisemblablement une colonne (colonne de clé primaire par exemple) qui identifie de manière unique une ligne et un pivot
L'opérateur prend en considération les valeurs de cette colonne. Voici un exemple simple :
/*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
)
Une requête sur une telle table vous donnera la sortie (sortie indésirable) que vous avez fournie dans la question :
select A,B
from tbl
pivot(
max(col2) for col1 in ('a' as A,'b' as B)
)
Résultat :
A B
-- --
a1 null
null b1
Afin de produire le résultat souhaité, vous devez exclure la colonne avec une valeur unique pour une ligne :
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)
)
Résultat :
A B
-- --
a1 b1