2013-05-14 4 views
1

У меня есть отчет в моей базе данных Access, содержащей несколько полей, например, это выглядит следующим образом:доступа: Группировка в отчетах

Имя John
номер 18
Место где

Имя Джон
номер 19
Место где

Имя John
Номер 20
Место где

Имя Бого
Номер 30
Место где

Джон может иметь несколько номеров. Как вы можете видеть, «Джон» перечислен много раз, каждый с другим номером. Я хотел бы получить только одну строку с именем «Джон», примерно следующее:

Наименование John
Номер 18; 19; 20
Место где

Имя Бого
Номер 30
Место где

Как я могу добиться этого?

ответ

1

Решение заключается в использовании кода VBA в модуле доступа для «соединять» повторяющиеся значения («Номер» в вашем случае). Общий вид кода:

Option Compare Database 
Option Explicit 

Public Function ListChildNames(ParentID As Long) As String 
Dim cdb As DAO.Database, rst As DAO.Recordset, rtn As String 
Const separator = "; " 
Set cdb = CurrentDb 
Set rst = cdb.OpenRecordset(_ 
     "SELECT [ChildName] FROM [ChildTable] " & _ 
     "WHERE ID=" & ParentID, _ 
    dbOpenSnapshot) 
rtn = "" 
Do While Not rst.EOF 
    rtn = rtn & rst![ChildName] & separator 
    rst.MoveNext 
Loop 
rst.Close 
Set rst = Nothing 
Set cdb = Nothing 
If Len(rtn) > 0 Then 
    rtn = Left(rtn, Len(rtn) - Len(separator)) '' trim trailing separator 
End If 
ListChildNames = rtn 
End Function 

(Вы должны подправить имена таблиц и столбцов в соответствии с вашими структуры таблиц.)

Затем в качестве источника записи для отчета, вместо того, чтобы использовать ...

SELECT [Name], [Number] ... FROM ... 

... вы бы использовать что-то вроде ...

SELECT [Name], ListChildNames([Name]) AS Numbers ... FROM ... 

... чтобы получить [Имя ] и (объединенный список) значений [Число] в одной строке.

+0

спасибо. Ваш подход работает. – Chris

Смежные вопросы