Создать разделенную запятыми строку из нескольких строк одного столбца?
У меня есть такая таблица доступа
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 дополнительный шаг (не показан).