Группировка транзакционных записей в одну ячейку

#sql #sql-server #tsql #ms-access

#sql #sql-сервер #tsql #ms-access

Вопрос:

У меня есть 2 таблицы (компании и контакты). Мне нужно создать список всех компаний (1 строка на идентификатор компании) со всеми контактами для каждого идентификатора компании, перечисленными в одной ячейке, разделенными разрывом строки для каждого отдельного контакта в компании.

Я бы предпочел, чтобы это было сделано в Access, поскольку таблицы взяты из базы данных access BE, но если это проще создать в MSQL, я тоже могу это сделать.

Спасибо за любые советы или решения.

Комментарии:

1. Это отчет, который вы запрашиваете?

2. Нет. Мне нужно вывести таблицу company в виде файла csv с контактами в качестве дополнительного столбца.

3. При запросе Access вам потребуется использовать определяемую пользователем функцию в VBA, которая не будет работать вне Access.

Ответ №1:

Если это для одного столбца, есть статья, которая может показаться вам интересной

https://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/

Комментарии:

1. Спасибо за ссылку. Это происходит именно через то, что я хочу сделать. Большое спасибо.

Ответ №2:

Для SQL 2005 будет ли что-то вроде этого делать трюк?

 ;with data as
(
SELECT  'Company1' AS company, 'Contact1' AS contact UNION ALL
SELECT  'Company1' AS company, 'Contact2' AS contact UNION ALL
SELECT  'Company1' AS company, 'Contact3' AS contact UNION ALL
SELECT  'Company1' AS company, 'Contact5' AS contact UNION ALL
SELECT  'Company2' AS company, 'Contact1' AS contact UNION ALL
SELECT  'Company3' AS company, 'Contact1' AS contact
)
SELECT
company
,STUFF((
SELECT ','   contact
FROM data d2
WHERE d2.company = d1.company
FOR XML PATH('')), 1, 1, '') as contacts
FROM data d1
GROUP BY company
 

Комментарии:

1. Большое спасибо за код. Из ссылки, которую отправил Kip Real, и этот код определенно направил меня в правильном направлении.