Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Operador de pivô Oracle


Você está obtendo a saída assim simplesmente porque está emitindo select declaração contra uma tabela (seu tbl table) que presumivelmente contém uma coluna (coluna de chave primária, por exemplo) que identifica exclusivamente uma linha e pivot O operador leva em consideração os valores dessa coluna. Aqui está um exemplo simples:
/*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
)

Uma consulta em tal tabela fornecerá a saída (saída indesejável) que você forneceu na pergunta:
select A,B 
  from tbl
pivot(
  max(col2) for col1 in ('a' as A,'b' as B)
)

Resultado:
A    B
--   --
a1   null   
null b1

Para produzir a saída desejada, você precisa excluir a coluna com valor exclusivo para uma linha:
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)
  )

Resultado:
A  B
-- --
a1 b1