sql >> Database >  >> RDS >> Oracle

Oracle pivot-operator

Je krijgt zo'n output, simpelweg omdat je select . uitgeeft statement tegen een tabel (uw tbl tabel) die vermoedelijk een kolom bevat (bijvoorbeeld kolom met primaire sleutel) die op unieke wijze een rij en pivot identificeert operator houdt rekening met de waarden van die kolom. Hier is een eenvoudig voorbeeld:

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

Een query op zo'n tabel geeft je die output (ongewenste output) die je hebt opgegeven in de vraag:

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

Resultaat:

A    B
--   --
a1   null   
null b1

Om de gewenste uitvoer te produceren, moet u de kolom met een unieke waarde voor een rij uitsluiten:

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

Resultaat:

A  B
-- --
a1 b1 


  1. Tabellen en schema's opnemen bij het weergeven van de identiteitskolommen in een SQL Server-database

  2. Hoe taalinstellingen uw FORMAT()-resultaten in SQL Server kunnen beïnvloeden (T-SQL-voorbeelden)

  3. Vind waarden die geen getallen bevatten in MySQL

  4. Hoe te controleren of een tabel al bestaat voordat u deze in MySQL maakt