sql >> Databasteknik >  >> RDS >> Oracle

Minska 19 kolumner till 5 kolumner

Det du letar efter är den enkla PIVOT funktion.

Den enda skillnaden är att du inte vill pivot i kolumnen värde , men möjligt i sökordsordningen .

Här är frågan att pivotera i alfabetisk ordning av sökorden.

Observera att de två första underfrågorna endast producerar förenklad data enligt följande:

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

Frågan beräknar först radnumret med ordningen CODRCA och 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

Om du föredrar annan sorteringslogik anpassa efter behov. Anpassa även om du behöver olika kolumnnamn.



  1. Sammanfatta data i en ny tabell

  2. Postgresql create extension misslyckas

  3. MySQL Allvarligt fel:Kan inte öppna och låsa behörighetstabeller:Felaktigt filformat "användare"

  4. Finns det en MD5 Sum-funktion i PL/SQL