sql >> Databasteknik >  >> RDS >> Oracle

Kan någon förklara denna fråga?

I grund och botten avpivoterar han data med hjälp av 3 urvalssatser (1 för varje attribut) och UNION dem tillsammans för att göra ett gemensamt tabelluttryck så att han får rader för varje anställdas attribut.

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

Den andra tabellen använder han en fönsterfunktion för att tilldela ett nummer till attribut, avdelning. Han använder det här numret senare för att gå tillbaka till sina opivoterade data. Han postade sin kod för exemplet.

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

Jag skulle föreslå att du använder hans exempeldata som han tillhandahållit och kör följande. Detta kommer att visa dig CTE:erna. Jag tror att när du ser den informationen kommer det att vara mer vettigt.

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



  1. SQLAlchemy laddar gärna flera relationer

  2. Hur gör man MySQL + Substring? + byta ut?

  3. Hur kan jag radera med INNER JOIN med SQL Server?

  4. Dumpar SQL-frågor till skärmen i Laravel