По принцип той депивотира данните с помощта на 3 оператора за избор (1 за всеки атрибут) и UNION
ги заедно, за да направи общ израз на таблица, така че да получи редове за всеки атрибут на служителите.
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 a.*, row_number() over (partition by department order by attributeID) rn
from attributes a
Предлагам ви да използвате неговите примерни данни, които той предостави, и да изпълните следното. Това ще ви покаже CTE. Мисля, че след като видите тези данни, ще има повече смисъл.
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