[ORACLE] Pivot danych

[ORACLE] Pivot danych
C6
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 20 godzin
  • Postów:197
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.

edytowany 1x, ostatnio: choracy69
YA
  • Rejestracja:prawie 10 lat
  • Ostatnio:8 dni
  • Postów:2370
2

Możesz tradycyjnego pivota:

Kopiuj
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:

Kopiuj
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ć.

C6
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 20 godzin
  • Postów:197
0
yarel napisał(a):

Możesz tradycyjnego pivota:

Kopiuj
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:

Kopiuj
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!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.