sql >> Database >  >> RDS >> Oracle

Verminder 19 kolommen tot 5 kolommen

Wat u zoekt is een eenvoudige PIVOT functie.

Het enige verschil is dat je niet wilt pivot in de kolom waarde , maar mogelijk op de zoekwoordvolgorde .

Hier de zoekopdracht om te draaien op de alfabetische volgorde van de zoekwoorden.

Merk op dat de eerste twee subquery's alleen de vereenvoudigde gegevens opleveren als volgt:

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

Query berekent eerst het rijnummer in de volgorde van de CODRCA en de pivot erop:

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

resultaat

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

Als u de voorkeur geeft aan een andere sorteerlogica pas indien nodig aan. Pas ook aan als u andere kolomnamen nodig heeft.



  1. Verbindingstime-out instellen in SQLAlchemy

  2. Postgresql intarray-fout:undefined symbool:pfree

  3. Hoe prioriteit te geven aan bepaalde zoekopdrachten in MySQL?

  4. Waarom krijg ik Ora-30004 als het scheidingsteken sys_connect_by_path niet aanwezig is in kolomwaarden?