Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zmniejsz 19 kolumn do 5 kolumn

Czego szukasz prostego PIVOT funkcja.

Jedyna różnica polega na tym, że nie chcesz pivot w kolumnie wartość , ale możliwe w kolejności słów kluczowych .

Tutaj zapytanie do przestawienia w kolejności alfabetycznej słów kluczowych.

Pamiętaj, że pierwsze dwa podzapytania dają tylko uproszczone dane w następujący sposób:

CODPRO  CODRCA
------- ------
400JE   LOGIST
400JE   INDLEG
50EFJ10 TP    
50EFJ10 ESPVER
50EFJ10 AGRICU
50EFJ10 INDLEG
50EFJ10 LOGIST

Zapytanie najpierw oblicza numer wiersza, używając kolejności CODRCA i pivot na nim:

with PRO as (
select '400JE' CODPRO from dual union all
select '50EFJ10' CODPRO from dual),
RCA as (
select '400JE' CODPRO, 'LOGIST' CODRCA from dual union all
select '400JE' CODPRO, 'INDLEG' CODRCA from dual union all
select '50EFJ10' CODPRO, 'TP' CODRCA from dual union all
select '50EFJ10' CODPRO, 'ESPVER' CODRCA from dual union all
select '50EFJ10' CODPRO, 'AGRICU' CODRCA from dual union all
select '50EFJ10' CODPRO, 'INDLEG' CODRCA from dual union all
select '50EFJ10' CODPRO, 'LOGIST' CODRCA from dual),
rn as (
select PRO.CODPRO,RCA.CODRCA,
row_number() over (partition by PRO.CODPRO order by RCA.CODRCA) as rn
from PRO
join RCA on PRO.CODPRO = RCA.CODPRO)
select *
from rn
pivot (max(CODRCA)  CODRCA for (rn) in
(1 as "C1",
 2 as "C2",
 3 as "C3",
 4 as "C4",
 5 as "C5"))

wynik

CODPRO  C1_COD C2_COD C3_COD C4_COD C5_COD
------- ------ ------ ------ ------ ------
400JE   INDLEG LOGIST                     
50EFJ10 AGRICU ESPVER INDLEG LOGIST TP

Jeśli wolisz inny logikę sortowania dostosuj zgodnie z wymaganiami. Dostosuj również, jeśli potrzebujesz różnych nazw kolumn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLPlus varchar2 wypisuje białe znaki

  2. Wiersze Oracle Delete zgodne z wieloma wartościami

  3. Optymalizacja zapytania Oracle

  4. Jak agregować różne wartości z wielu list za pomocą Oracle JSON_OBJECT i JSON_ARRAYAGG

  5. Jak sprawić, by funkcja zwracała nazwy kolumn ograniczenia?