2016-09-28 4 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 
Смежные вопросы