Создать разделенную запятыми строку из нескольких строк одного столбца? - PullRequest
6 голосов
/ 13 октября 2011

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

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 ]

7 голосов
/ 13 октября 2011

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

0 голосов
/ 24 марта 2018

Если вам не нужно каждое отдельное значение в списке с разделителями-запятыми, а, скажем, до первых 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.

0 голосов
/ 13 октября 2011

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

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

Никакой VBA не задействован вообще.

...