sql >> データベース >  >> RDS >> Oracle

誰でもこのクエリを説明できますか?

    基本的に、彼は 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
      


    1. SQLServerでのROLLBACKTRUNCATE

    2. ADDDATE()の例– MySQL

    3. サブクエリの結果に正規表現を使用するにはどうすればよいですか?

    4. Herokuで時折Postgresエラーが発生しました:ホスト名<pg URL>をアドレスに変換できませんでした:名前またはサービスが不明です(PG ::Error)