SQL-запрос MS Access для объединения или объединения связанных полей - PullRequest
1 голос
/ 24 января 2011

Если бы у меня была следующая таблица MS Access и примеры данных,

<i>Status tbl</i>
UpdateID PK
CustomerNo text
StatusType text
UpdateDate date
UpdateID, CustomerNo, StatusType, UpdateDate
001, <i>0099</i>, Open, 2011-01-01
002, <i>0099</i>, Pend, 2011-01-02
003, <i>0100</i>, Open, 2011-01-03
004, <i>0099</i>, Appr, 2011-01-04
005, <i>0100</i>, Pend, 2011-01-05
006, <i>0099</i>, Clsd, 2011-01-07

тогда как я могу написать запрос, который приведет к следующему консолидированному / объединенному выводу?

CustomerNo, UpdateDate
<i>0099</i>, 2011-01-01;2011-01-02;2011-01-04;2011-01-07
<i>0100</i>, 2011-01-03;2011-01-05

Ответы [ 2 ]

2 голосов
/ 24 января 2011

Нет удобного способа сделать это в Access, не используя код для итерации по возвращенным строкам и построения строки самостоятельно.

Вот код, который поможет вам сделать это:

Public Function ListOf(sSQL As String, Optional sSeparator As String = ", ") As String

  Dim sResults As String
  Dim rs As DAO.Recordset

  Set rs = CurrentDb.OpenRecordset(sSQL)

  While Not rs.EOF

    If sResults = "" Then
      sResults = Nz(rs.Fields(0).Value, "???")
    Else
      sResults = sResults + sSeparator & Nz(rs.Fields(0).Value, "???")
    End If

    rs.MoveNext

  Wend

  ListOf = sResults

End Function

А вот как вы можете использовать его в запросе Access:

 SELECT [CustomerNo], 
 (ListOf('SELECT [UpdateDate] FROM StatusTbl WHERE CustomerNo = ' + CStr([CustomerNo]))) AS UpdateDates
 FROM StatusTbl

Обратите внимание, что это работает, только если вы выполняете запрос в Access, запросы выполняются (например, из ADO)соединение не будет иметь доступа к функции ListOf.

0 голосов
/ 24 января 2011

Это встречается довольно часто, вот предыдущий дубль: Объединить строки / объединить строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...