У меня есть представление со следующей структурой:
areas employee_id complaint_type_id
a1 e1 c1
a2 e1 c1
a3 e2 c1
a1 e1 c2
.
Теперь в коде я извлекаю area и complaint_type_id для конкретного сотрудника из представления. Я хочу отобразить категории жалоб, назначенные сотруднику для разных областей.
Вывод, который я получаю, выглядит следующим образом:
area complaint_type_id
a1 c1
a2 c1
a3 c1
a1 c2
a2 c2
a3 c2
В этом выводе области повторяются для каждого типа идентификатора жалобы. Я хочу отображать категории жалоб в одной строке для определенной области
Мой желаемый результат выглядит следующим образом:
area complaint_type_id
a1 c1,c2
a2 c1,c2
a3 c1,c2
Я пытался использовать предложение group by, но в выводе области group by появляются дважды для каждого типа жалобы. Как я могу достичь желаемого результата?


Если у вас установлена последняя версия SQLS или SQLAzure:
SELECT
area,
STRING_AGG(complaint_type_id, ',') as complaint_type_id
FROM
table
GROUP BY
area
пс; интересная статья: https://sqlperformance.com/2014/08/t-sql-queries/sql-server-grouped-concatenation - суть которой заключается в том, что "если у вас нет последней версии SQLS, чтобы иметь STRING_AGG, используйте STUFF/FOR XML PATH или .NET CLR"
Возьмите CTE для других таблиц, и это будет работать:
select distinct t1.area,
STUFF((SELECT distinct ',' + t2.complaint_type_id
from Table1 t2
where t1.area = t2.area
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,0,'') data
from Table1 t1;
проверить:http://sqlfiddle.com/#!18/0f121/7
ваше решение работает для меня, но оно извлекает все типы жалобы_типа_идентификатора. Мне нужны только те, которые закреплены за конкретным сотрудником
используйте эквивалент списка FOR XML PATH !!