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

Trasposizione incoerente

Potresti utilizzare un'espressione di tabella comune per assegnare a ciascun acquirente un ordine all'interno del fornitore, quindi eseguire semplicemente un caso normale per inserirli nelle colonne;

WITH cte AS (
  SELECT supplier, buyer, 
    ROW_NUMBER() OVER (PARTITION BY supplier ORDER BY buyer) rn
  FROM Table1
)
SELECT supplier, 
       MAX(CASE WHEN rn=1 THEN buyer END) buyer1,
       MAX(CASE WHEN rn=2 THEN buyer END) buyer2,
       MAX(CASE WHEN rn=3 THEN buyer END) buyer3
FROM cte
GROUP BY supplier;

Un SQLfiddle con cui testare .