Объединить данные разных строк в одну ячейку в sql

У меня есть представление со следующей структурой:

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 появляются дважды для каждого типа жалобы. Как я могу достичь желаемого результата?

используйте эквивалент списка FOR XML PATH !!

nikhil sugandh 18.04.2019 17:58
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
1
260
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если у вас установлена ​​последняя версия 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

ваше решение работает для меня, но оно извлекает все типы жалобы_типа_идентификатора. Мне нужны только те, которые закреплены за конкретным сотрудником

Amit Kaushal 18.04.2019 18:35

Другие вопросы по теме