[ORACLE] Pivot danych

0

Mam tabelę:

SEG || DESC || CODE
FUND || ok || 1234
FUND || not || 1235
COM || as || 1234
COM || pas || 1235

Czyli mam segmenty powtarzające się (z 10 wartości), każdy segment ma wartości DESC). Jeden CODE ma dla każdego SEGMENTU jedną wartość DESC.
Inaczej mówiąc: jeden CODE ma 10 wartości SEG i dla każdego DESC.

Jak przerobić tabelę żeby otrzymac:

FUND || COM || CODE
ok || as || 1234
not || pas ||1235

Proszę o wskazówki.

2

Możesz tradycyjnego pivota:

select
  max(case when seg='FUND' then desc else null end) fund,
  max(case when seg='COM' then desc else null end) com,
  code
from tabelka
  group by code;

albo skorzystać ze składni Oracle 11+ i zrobić coś takiego:

select code from tabelka
pivot (
	max(Desc) for segment in ('FUND','COM') 
) order by code; 

Nie chciało mi się tego wklepywać w bazę i tworzyć danych testowych, więc w zapytaniach mogą być jakieś niedoróbki. Masz jednak 2 pomysły jak tego pivota zrobić.

0
yarel napisał(a):

Możesz tradycyjnego pivota:

select
  max(case when seg='FUND' then desc else null end) fund,
  max(case when seg='COM' then desc else null end) com,
  code
from tabelka
  group by code;

albo skorzystać ze składni Oracle 11+ i zrobić coś takiego:

select code from tabelka
pivot (
	max(Desc) for segment in ('FUND','COM') 
) order by code; 

Nie chciało mi się tego wklepywać w bazę i tworzyć danych testowych, więc w zapytaniach mogą być jakieś niedoróbki. Masz jednak 2 pomysły jak tego pivota zrobić.

Akurat operuję na bazie 12 więc postaram się wykorzystać drugi pomysł.
Dzięki za rady!

1 użytkowników online, w tym zalogowanych: 0, gości: 1