Помогите с ф-цией отбора данных, задолбался!

йцукенгшщ
Дата: 10.03.2016 23:24:37
Записи в запросе-источнике отсортированы по первому полю, структура такая:
ААА, ппп, ррр,......
ААА, ггг, шшш....
ААА, иии, ььь...
БББ, жжж, ппп...
...................
нужно получить результат:
ААА, ппп & ррр & ггг & шшш & иии & ььь & ....
БББ, , жжж, ппп...
запутался в Do While, For... и т.п.
guest_rusimport
Дата: 10.03.2016 23:57:12
йцукенгшщ,
в запросе
SELECT Поле1, fff(Поле1)
FROM (SELECT t1.Поле1
FROM t1
GROUP BY t1.Поле1
ORDER BY t1.Поле1)

функция в общем модуле
Public Function fff(p1)
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("select Поле2,Поле3 from t1 Where Поле1='" & p1 & "'")
If rst.EOF Or rst.BOF Then fff = "": Exit Function
rst.MoveFirst
Do While Not rst.EOF
    s = s & " & " & rst.Fields(0) & " & " & rst.Fields(1)
    rst.MoveNext
Loop
fff = Right(s, Len(s) - 3)
End Function
йцукенгшщ
Дата: 11.03.2016 08:56:29
Да, спасибо, так работает!
А как-бы всё в процедуру перенести? Я заполняю ф-цией таблицу в Ecell и обойтись без запроса мне было бы проще.
И ещё: во вложенном запросе Вы группировкой убираете повторы в Поле1.
Я то пытался решить проблему так:
- запрос-источник отсортирован по Полю1 и содержит все нужные поля
- записи последовательно перебираются и пока значение Поля1 не меняется - значения остальных полей собираются в строку
- при изменении значения Поля1 начинается новое формирование.

...поэтому я и написал, что запутался в всех этих Do While, For... и т.п.
йцукенгшщ
Дата: 11.03.2016 14:21:13
Кажется получилось:
Set rst = CurrentDb.OpenRecordset("Запрос1")
rst.MoveFirst
s = ""
str1 = rst.Fields(0)
Do While Not rst.EOF 
    If str1 = rst.Fields(0) Then
        For i = 1 To 3
            s = s & " " & rst.Fields(i)
        Next i
        rst.MoveNext
    Else
        Debug.Print str1 & " " & s
        s = ""
        str1 = rst.Fields(0)
    End If
Loop
Debug.Print str1 & " " & s

Покритикуйте, если есть за что.