sql >> Database teknologi >  >> RDS >> Oracle

Oracle pivot operatør

Du får outputtet sådan, simpelthen fordi du udsteder select sætning mod en tabel (din tbl tabel), som formodentlig indeholder en kolonne (f.eks. primær nøglekolonne), som entydigt identificerer en række og pivot operatøren tager værdierne i den pågældende kolonne i betragtning. Her er et simpelt eksempel:

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

En forespørgsel mod en sådan tabel vil give dig det output (uønsket output), du har angivet i spørgsmålet:

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

Resultat:

A    B
--   --
a1   null   
null b1

For at producere det ønskede output skal du ekskludere kolonnen med en unik værdi for en række:

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

Resultat:

A  B
-- --
a1 b1 


  1. Hvornår skal man bruge enkelte anførselstegn, dobbelte anførselstegn og backticks i MySQL

  2. Generisk Ruby-løsning til SQLite3 LIKE eller PostgreSQL ILIKE?

  3. Vil du udflade aggregerede nøgle/værdi-par fra et JSONB-felt?

  4. RDBMS vs NoSQL