Oracle
 sql >> база данни >  >> RDS >> Oracle

Намалете 19 колони до 5 колони

Това, което търсите, е простият PIVOT функция.

Единствената разлика е, че не искате да pivot в колоната стойност , но е възможно в реда на ключовите думи .

Тук е заявката за завъртане по азбучен ред от ключовите думи.

Имайте предвид, че първите две подзаявки произвеждат само опростени данни както следва:

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

Заявката изчислява първо номера на реда, като използва реда на CODRCA и pivot върху него:

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

резултат

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

Ако предпочитате друга логика за сортиране адаптирайте според изискванията. Също така адаптирайте, ако имате нужда от различни имена на колони.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете zip папка в plsql (Oracle)

  2. Трябва да нулирате стойността на последователността в Oracle

  3. Filehelpers Excel към Oracle db

  4. Потърсете конкретен низ в колоната на Oracle clob

  5. Стартирайте съхранена процедура на SQL Server чрез връзка към база данни от Oracle