基本的に、彼は 3 つの select ステートメント (属性ごとに 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
プレ>もう 1 つのテーブルでは、ウィンドウ関数を使用して、部門の属性に番号を割り当てています。彼は後でこの数値を使用して、ピボットされていないデータに再び結合します。彼は例のコードを投稿しました。
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
プレ>