V podstatě rozloží data pomocí 3 vybraných příkazů (1 pro každý atribut) a UNION
společně vytvoří společný tabulkový výraz, takže získá řádky pro každý atribut zaměstnance.
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
V druhé tabulce se pomocí funkce okna přiřadí číslo atributu, oddělení. Toto číslo později použije k připojení zpět ke svým neotočným datům. Zveřejnil svůj kód pro příklad.
select a.*, row_number() over (partition by department order by attributeID) rn
from attributes a
Navrhoval bych, abyste použili jeho ukázková data, která poskytl, a spustili následující. To vám ukáže CTE. Myslím, že jakmile tato data uvidíte, budou dávat větší smysl.
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