Oracle
 sql >> Base de données >  >> RDS >> Oracle

Quelqu'un peut-il expliquer cette requête ?

Fondamentalement, il dé-pivote les données en utilisant 3 instructions de sélection (1 pour chaque attribut) et UNION ensemble pour créer une expression de table commune afin qu'il obtienne des lignes pour chaque attribut d'employés.

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'autre table utilise une fonction de fenêtre pour attribuer un numéro à l'attribut, au département. Il utilise ce numéro plus tard pour rejoindre ses données non pivotées. Il a posté son code pour l'exemple.

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

Je vous suggère d'utiliser ses exemples de données qu'il a fournis et d'exécuter ce qui suit. Cela vous montrera les CTE. Je pense qu'une fois que vous aurez vu ces données, cela aura plus de sens.

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