Oracle
 sql >> Base de données >  >> RDS >> Oracle

Opérateur pivot Oracle

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