1

表1:

Person_ID   Name    Salary_Revisions
1           Test1   100
1           Test1   200
2           Test2   300
2           Test2   400

表 2:

Person ID                  Department
-------------------------- ---------------- 
1                          Physics
1                          Chemistry
2                          Maths

次のような結果を取得したいと思います。

Person_ID             Name               Salary_Revisions       Department
--------------------- ------------------ ---------------------- --------------
1                     Test1              100                    Physics
1                     Test1              200                    Chemistry
2                     Test2              300                    Maths
2                     Test2              400

実際:

Person ID          Name      Salary Revisions      Department
------------------ --------- --------------------- ----------------
1                  Test1     100                   Physics
1                  Test1     200                   Physics
1                  Test1     100                   Chemistry
1                  Test1     200                   Chemistry
2                  Test2     300                   Maths
2                  Test2     400                   Maths

期待される結果のように実装するのを手伝ってもらえますか?

これを実装している間、個人 ID を使用して表 1 と表 2 を左結合するストアド プロシージャを作成しました。データベースでクエリを実行することで実際の結果のように返ってきます。

SQL クエリ:

SELECT table1.person_ID, table1.name, table1.salary_revisions, table2.department 
from table1 
left outer join table2 on table1.person_id=table2.person_id
4

3 に答える 3

1

使用シナリオがよくわかりませんが、これはあなたが望むものだと思います。

1 人あたりの各列の一意の値をすべて取得するための 2 つの CTE と、FULL OUTER JOINそれらを行ごとに結合するための CTE。

WITH salary_revision AS (
  SELECT person_id, name, salary_revisions sr, 
  ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY person_id) row
  FROM table1
), department AS (
  SELECT person_id, department,
  ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY person_id) row
  FROM table2
)
SELECT sr.person_id,sr.name, sr.sr, d.department
FROM salary_revision sr
FULL OUTER JOIN department d
  ON sr.person_id = d.person_id
 AND sr.row = d.row

でテストする SQLfiddle

于 2013-05-19T12:38:34.553 に答える
-1
    WITH salary_revision AS (
     SELECT person_id, name, salary_revisions sr, 
     ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY person_id) row
     FROM table1
    ), department AS (
     SELECT person_id, department,
     ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY person_id) row
    FROM table2
    )

SELECT COALESCE(sr.person_id,d.person_id),sr.name, sr.sr, d.department FROM salary_revision sr FULL OUTER JOIN department d ON sr.person_id = d.person_id AND sr.row = d.row

COALESCE を指定すると、最初の非 null 値が考慮されます。したがって、各行で peson_id を取得します。

于 2013-05-23T18:23:48.430 に答える