MS Access SQL: объединение, разделенное запятыми один ко многим

Со следующим видом таблицы:

tblRequest
-RequestID(double)
-RequestDescription (String)


tblError
-ErrorID(long integer)
-ErrorName(String)
-RequestID(double)

Вышеуказанное отношение является отношением ОДИН к МНОГИМ.

Я хочу просмотреть данные следующим образом. Поэтому мне нужен запрос SELECT, который отображает данные следующим образом.

Request          Error(s)
1                Error1, Error6
2                Error2, Error3
3.4              Error4, Error2, Error1

Я пытался найти ответ, который включал FOR XML PATH('')). Тем не менее, я не думаю, что это может работать в Ms-Access.

1 ответ

Вот потенциальное решение.

Шаг 1:

Создайте эту функцию в вашем приложении MS Access. Я не думаю, что это наиболее эффективное решение, однако оно должно работать достаточно хорошо, если число записей не очень велико.

Public Function getErrorText(ByVal MyId As Double) As String
    Dim myrs        As Recordset

    'Create the recordset
    Set myrs = CurrentDb.OpenRecordset("select distinct ErrorID from tblError where RequestID = " & MyId)

    'Build the error string
    Do Until myrs.EOF
        getErrorText = myrs.Fields(0).Value & ", " & getErrorText
        myrs.MoveNext
    Loop

    'Clean up
    myrs.Close
    Set myrs = Nothing

    'Return the correct cleaned up string
    getErrorText = Left(getErrorText, Len(getErrorText) - 2)
End Function

Шаг 2:

Затем вы сможете запустить следующую инструкцию SQL, чтобы получить желаемый результат.

SELECT distinct tblError.RequestID, getErrorText( tblError.[RequestID]) AS [Error(s)]
FROM tblError INNER JOIN tblRequest ON tblError.RequestID = tblRequest.RequestID
WHERE (((getErrorText( tblError.[RequestID])) Is Not Null));
Другие вопросы по тегам