Zasadniczo unpivotuje dane za pomocą 3 instrukcji select (1 dla każdego atrybutu) i UNION
je razem, aby utworzyć wspólne wyrażenie tabelowe, dzięki czemu otrzymuje wiersze dla każdego atrybutu pracowników.
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
W drugiej tabeli używa funkcji okna, aby przypisać numer do atrybutu, działu. Używa tego numeru później, aby dołączyć z powrotem do swoich nieprzestawnych danych. Umieścił swój kod na przykład.
select a.*, row_number() over (partition by department order by attributeID) rn
from attributes a
Sugeruję, abyś wykorzystał jego przykładowe dane, które dostarczył i uruchomił następujące. To pokaże Ci CTE. Myślę, że kiedy zobaczysz te dane, nabierze to większego sensu.
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