2016-09-28 7 views
2

結果のクエリが正しい結果のクエリと同じになるように、行を結合します。行同士を組み合わせる方法はありますか?

マイコード:

SELECT space_num, 
     name AS employee, 
     NULL AS employee2 
FROM (dbo.employee 
     INNER JOIN dbo.occupancy ON employee.id = occupancy.employee_id) 
RIGHT JOIN dbo.space ON occupancy.space_id = space.id 
UNION 
SELECT space_num, 
     NULL AS employee, 
     name AS employee2 
FROM (dbo.employee 
     INNER JOIN dbo.allocation ON employee.id = allocation.employee_id) 
RIGHT JOIN dbo.space ON allocation.space_id = space.id 

マイ結果:

my result query

期待される結果:

Correct result query

+2

元のテーブルからサンプルデータを投稿すると便利です。 –

答えて

1

おそらく

SELECT e.name as employee, occupiedSpace, allocatedSpace 
FROM dbo.employee e 
LEFT JOIN (
    SELECT COALESCE(oNm.employee_id, aNm.employee_id) as employee_id 
     , aNm.space_num as occupiedSpace 
     , oNm.space_num as allocatedSpace 
    FROM 
     (SELECT employee_id, rn = row_number() over (partition by employee_id order by id), s.space_num 
     FROM dbo.occupancy sp 
     JOIN dbo.space s 
     ON sp.space_id = s.id 
     ) oNm 
    FULL JOIN 
     (SELECT employee_id, rn = row_number() over (partition by employee_id order by id), s.space_num 
     FROM dbo.allocation sp 
     JOIN dbo.space s 
     ON sp.space_id = s.id 
     ) aNm 
    ON oNm.employee_id = aNm.employee_id and oNm.rn= aNm.rn 
) t ON e.employee_id = t.employee_id 
関連する問題