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));