Я не понимаю столбец emp_id
в ожидаемом выводе. Итак, я полагаю, вы хотите самый низкий emp_id
в той же области. Кроме того, я предполагаю, что вы по ошибке записали 1-ю строку столбца email_addr
ожидаемого результата как aaaa@gmail.com,bbbb@gmail.com
вместо aaaa@gmail.com, dddd@gmail.com
.
Если вышеприведенное предположение ОК , то я думаю, что вы можете достичь ожидаемого результата, используя следующий запрос.
SELECT
MIN(u.emp_id) AS emp_id,
u.areaid,
STUFF(
(
SELECT ', ' + em.email_addr
FROM employee em
INNER JOIN USERS us ON em.emp_id = us.emp_id
WHERE us.areaid = u.areaid
FOR XML PATH('')
),1,1,''
) AS email
FROM users u
GROUP BY u.areaid
НО ....
Поскольку в данной таблице нет сотрудника для emp_id
= 6, вы можете отбросить строки с пустым адресом электронной почты, просто изменив вышеуказанный запрос следующим образом
SELECT *
FROM (
SELECT
MIN(u.emp_id) AS emp_id,
u.areaid,
STUFF(
(
SELECT ', ' + em.email_addr
FROM employee em
INNER JOIN USERS us ON em.emp_id = us.emp_id
WHERE us.areaid = u.areaid
FOR XML PATH('')
),1,1,''
) AS email
FROM users u
GROUP BY u.areaid
) AS T
WHERE T.email IS NOT NULL
Вот рабочий dbfiddle
Надеюсь, это поможет. Спасибо!