Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Reduzieren Sie 19 Spalten auf 5 Spalten

Was Sie suchen, ist der einfache PIVOT Funktion.

Der einzige Unterschied besteht darin, dass Sie nicht pivot möchten in der Spalte Wert , aber in der Schlüsselwortreihenfolge möglich .

Hier die Abfrage, die nach der alphabetischen Reihenfolge geschwenkt werden soll der Schlüsselwörter.

Beachten Sie, dass die ersten beiden Unterabfragen nur die vereinfachten Daten erzeugen wie folgt:

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

Die Abfrage berechnet zuerst die Zeilennummer anhand der Reihenfolge des CODRCA und der pivot drauf:

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

Ergebnis

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

Wenn Sie eine andere Sortierlogik bevorzugen bei Bedarf anpassen. Passen Sie auch an, wenn Sie andere Spaltennamen benötigen.