sql >> Database teknologi >  >> RDS >> Oracle

Reducer 19 kolonner til 5 kolonner

Hvad du leder efter er den simple PIVOT funktion.

Den eneste forskel er, at du ikke ønsker at pivot i kolonnen værdi , men muligt i søgeordsrækkefølgen .

Her er forespørgslen om at pivotere på alfabetisk rækkefølge af søgeordene.

Bemærk, at de to første underforespørgsler kun producerer de forenklede data som følger:

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

Forespørgsel beregner først rækkenummeret ved hjælp af rækkefølgen CODRCA og pivot på den:

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"))
 

resultat

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

Hvis du foretrækker anden sorteringslogik tilpas efter behov. Tilpas også, hvis du har brug for forskellige kolonnenavne.



  1. Proxy-baseret dynamisk datamaskering i FieldShield

  2. Hvad er LIMIT-klausulalternativet i JPQL?

  3. masseopdater mysql-tabel decimalværdi og skift kolonnefelttype

  4. Oracle PL/SQL Trigger kører kun, hvis der er foretaget ændringer i data efter 9-5 timer