Về cơ bản, anh ấy đã giải nén dữ liệu bằng cách sử dụng 3 câu lệnh chọn (1 cho mỗi thuộc tính) và UNION
chúng cùng nhau để tạo một biểu thức bảng chung để anh ta nhận được các hàng cho mỗi thuộc tính nhân viên.
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
Bảng còn lại anh ta sử dụng một hàm cửa sổ để gán một số cho thuộc tính, bộ phận. Anh ấy sử dụng số này sau đó để kết nối lại với dữ liệu chưa được chia nhỏ của mình. Anh ấy đã đăng mã của mình để làm ví dụ.
select a.*, row_number() over (partition by department order by attributeID) rn
from attributes a
Tôi đề nghị bạn sử dụng dữ liệu mẫu của anh ấy mà anh ấy cung cấp và chạy như sau. Điều này sẽ hiển thị cho bạn các CTE. Tôi nghĩ một khi bạn nhìn thấy dữ liệu đó, nó sẽ có ý nghĩa hơn.
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