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

Qualcuno può spiegare questa domanda?

Fondamentalmente annulla i dati utilizzando 3 istruzioni select (1 per ogni attributo) e UNION insieme per creare un'espressione di tabella comune in modo da ottenere righe per ogni attributo dipendenti.

select employeeId, department, attribute1, 1 rn from employees union all
select employeeId, department, attribute2, 2 rn from employees union all
select employeeId, department, attribute3, 3 rn from employees

L'altra tabella usa una funzione finestra per assegnare un numero da attribuire, reparto. Utilizza questo numero in seguito per riconnettersi ai suoi dati non pivot. Ha pubblicato il suo codice per l'esempio.

select a.*, row_number() over (partition by department order by attributeID) rn
  from attributes a

Ti suggerirei di utilizzare i suoi dati di esempio che ha fornito ed eseguire quanto segue. Questo ti mostrerà i CTE. Penso che una volta che vedrai quei dati, avrà più senso.

with a as (
select a.*, row_number() over (partition by department order by attributeID) rn
  from attributes a),
e as (
select employeeId, department, attribute1, 1 rn from employees union all
select employeeId, department, attribute2, 2 rn from employees union all
select employeeId, department, attribute3, 3 rn from employees
)

SELECT * from a
SELECT * from e