Takový výstup získáváte jednoduše proto, že vydáváte select
příkaz k tabulce (vaše tbl
tabulka), která pravděpodobně obsahuje sloupec (například sloupec primárního klíče), který jednoznačně identifikuje řádek a pivot
operátor bere v úvahu hodnoty tohoto sloupce. Zde je jednoduchý příklad:
/*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
)
Dotaz na takovou tabulku vám poskytne výstup (nežádoucí výstup), který jste uvedli v otázce:
select A,B
from tbl
pivot(
max(col2) for col1 in ('a' as A,'b' as B)
)
Výsledek:
A B
-- --
a1 null
null b1
Chcete-li vytvořit požadovaný výstup, musíte vyloučit sloupec s jedinečnou hodnotou pro řádek:
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)
)
Výsledek:
A B
-- --
a1 b1