sql >> Base de Datos >  >> RDS >> Oracle

¿Alguien puede explicar esta consulta?

Básicamente, descentra los datos usando 3 instrucciones de selección (1 para cada atributo) y UNION juntarlos para hacer una expresión de tabla común para que obtenga filas para cada atributo de empleado.

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

La otra tabla está usando una función de ventana para asignar un número al atributo, departamento. Utiliza este número más tarde para volver a unirse a sus datos no pivotados. Publicó su código para el ejemplo.

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

Le sugiero que use los datos de ejemplo que proporcionó y ejecute lo siguiente. Esto le mostrará los CTE. Creo que una vez que veas esos datos tendrá más sentido.

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