Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle-Pivot-Operator

Sie erhalten die Ausgabe einfach deshalb, weil Sie select ausgeben -Anweisung gegen eine Tabelle (Ihre tbl Tabelle), die vermutlich eine Spalte (z. B. Primärschlüsselspalte) enthält, die eine Zeile und einen pivot eindeutig identifiziert Operator berücksichtigt Werte dieser Spalte. Hier ist ein einfaches Beispiel:

/*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
)

Eine Abfrage einer solchen Tabelle gibt Ihnen die Ausgabe (unerwünschte Ausgabe), die Sie in der Frage angegeben haben:

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

Ergebnis:

A    B
--   --
a1   null   
null b1

Um die gewünschte Ausgabe zu erzeugen, müssen Sie die Spalte mit eindeutigem Wert für eine Zeile ausschließen:

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)
  )

Ergebnis:

A  B
-- --
a1 b1