Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Kann jemand diese Abfrage erklären?

Grundsätzlich entpivotiert er die Daten mit 3 select-Anweisungen (1 für jedes Attribut) und UNION sie zusammen, um einen gemeinsamen Tabellenausdruck zu erstellen, sodass er Zeilen für jedes Mitarbeiterattribut erhält.

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

In der anderen Tabelle verwendet er eine Fensterfunktion, um dem Attribut, der Abteilung, eine Nummer zuzuweisen. Er verwendet diese Nummer später, um seine unpivotierten Daten wieder zusammenzuführen. Er hat seinen Code für das Beispiel gepostet.

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

Ich würde vorschlagen, dass Sie seine von ihm bereitgestellten Beispieldaten verwenden und Folgendes ausführen. Dies zeigt Ihnen die CTEs. Ich denke, sobald Sie diese Daten sehen, wird es mehr Sinn machen.

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