Создать разделенную запятыми строку из нескольких строк одного столбца?

У меня есть такая таблица доступа

ID | UserName | CarBrand
-------------------------
0    Peter      VW
1    Peter      Ferrari
2    Mike       Audi
3    Peter      Dodge
4    Heidi      BMW
5    Heidi      Ford

Мне нужны имена из CarBrand поле как разделенный запятыми список для отчета.

Есть ли способ (без VB, возможно, с использованием альтернативы COALESCE?), Чтобы создать строку через запятую, как это, без Name: часть?

Peter: VW, Ferrari, Dodge
Mike:  Audi
Heidi: BMW, Ford

Что касается отчета, есть ли другие способы сделать это, возможно, используя выражения в отчете?

3 ответа

Решение

Вы не можете сделать это Access без VBA. Coalesce не существует, но вы можете написать UDF с некоторыми функциональными возможностями, например, http://allenbrowne.com/func-concat.html Однако, как только вы используете UDF, запрос перестает работать вне Access.

Создайте основной отчет с уникальным списком имен пользователей.

Создайте подотчет со списком имен пользователей и их марок автомобилей. Присоединяйтесь к формам на имя пользователя. В дизайне подчиненной формы используйте 4-5 столбцов, которые печатаются горизонтально. Вы можете включить в поле Car Brand формулу, например = =[CarBrand] & ", " (Извините, последняя будет иметь ненужную запятую. Они будут равномерно распределены и разбиваются на новую строку, если у конкретного пользователя больше бренды, которые могут вписаться в ваш отчет (что будет очень трудно сделать, если вы просто создадите одну большую строку, разделенную запятыми).

VBA не участвует вообще.

Если вам не нужно каждое отдельное значение в списке с разделителями-запятыми, а, скажем, только до первых 3 или 4 или около того, то в Access есть чисто SQL-решение.

Я работаю над БД для некоммерческой организации, в которой есть репетиторы и классы. Для большинства классов есть только 1 или 2 репетитора. В целях отображения я все равно не могу перечислить более 2 или 3, поэтому я не беспокоюсь об усечении выбросов с 5 или более преподавателями.

Это позволит получить 3 преподавателя для каждого класса с наименьшим идентификатором преподавателя.

Select JTC1.ClassID, Min(JTC1.TID1) as TutorID1,
  Min(JTC1.TID2) as TutorID2,
  Min(JTC1.TID3) as TutorID3 
from (
  Select distinct TC1.ClassID,
    TC1.TutorID as TID1,
    TC2.TutorID as TID2,
    TC3.TutorID as TID3 
  from ((
   Classes C 
   Left Join TutorClasses TC1 
     on C.ClassID = TC1.ClassID)
   Left Join TutorClasses TC2 
     on TC1.ClassID = TC2.ClassID and TC1.TutorID < TC2.TutorID
   )
   Left Join TutorClasses TC3
     on TC2.ClassID = TC3.ClassID and TC2.TutorID < TC3.TutorID
   ) as JTC1
Group by JTC1.ClassID

Очевидно, что для объединения трех столбцов в 1 потребуется 1 дополнительный шаг (не показан).

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