|
Question : How to concatenate multiple matching/similar records
|
|
I'm trying to consolidate (concatenate) some data. I have the data in an MS Access 2003 database (single table).
Here's an example of the data I have: Company Location Department Employees MondoCorp Houston Sales Gene, Ray, Della MondoCorp Houston Sales Tom, Denise MondoCorp Houston Sales Ray, Jeffery, Mick MondoCorp Houston IT Brady, Elsa, Hugo MondoCorp Houston IT Chuck, Maggie MondoCorp Pasadena Sales Bucky, Terri MondoCorp Pasadena IT Uli, Mick, Tami MondoCorp Pasadena IT Jake, Esra, Remy
I need to take records where the 'Company', 'Location' and 'Department' match, and concatenate the multiple 'Employees' data as such:
Company Location Department Employees MondoCorp Houston Sales Gene, Ray, Della, Tom, Denise, Ray, Jeffery, Mick MondoCorp Houston IT Brady, Elsa, Hugo, Chuck, Maggie MondoCorp Pasadena Sales Bucky, Terri MondoCorp Pasadena IT Uli, Mick, Tami, Jake, Esra, Remy
Any Ideas?
Thank you so much for your time Experts!
|
|
Answer : How to concatenate multiple matching/similar records
|
|
First, create a query like this:
SELECT Company & Location & Department As ID, Employees FROM tblEmployees WHERE (Company & Location & Department)=[key];
Save it as qdyEmployeesList
Create another query using the function below:
SELECT DISTINCT Company, Location, Department, ConcatenateRecordsTxt("qdyEmployeesList",[Company] & [Location] & [Department],"Employees",", ") AS EmployessAll FROM tblEmployees;
Save it as qdyEmployeesAll. Run this.
/gustav
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
|
Public Function ConcatenateRecordsTxt( _
ByVal strSource As String, _
ByVal strKey As String, _
ByVal strField As String, _
Optional ByVal strSeparator As String = ";") _
As String
' Concatenates values from one field (strField) from all
' records in query strSource using parameter Value strKey.
' Values are separated by strSeparator.
' Default output like:
' 34;56;34;67;234
'
' 1999-10-12. Cactus Data ApS, CPH
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Dim rst As DAO.Recordset
Dim fld As DAO.Field
Dim booPluralis As Boolean
Dim strFields As String
On Error GoTo Err_ConcatenateRecordsTxt
Set dbs = CurrentDb()
If Len(strSource) > 0 And Len(strField) > 0 Then
Set qdf = dbs.QueryDefs(strSource)
qdf.Parameters(0) = strKey
Set rst = qdf.OpenRecordset()
Set fld = rst.Fields(strField)
With rst
While Not .EOF
If booPluralis = True Then
' There is more than one record.
' Add separator.
strFields = strFields & strSeparator
End If
strFields = strFields & Trim(fld.value)
booPluralis = True
.MoveNext
Wend
.Close
End With
Set fld = Nothing
Set rst = Nothing
Set qdf = Nothing
End If
Set dbs = Nothing
ConcatenateRecordsTxt = strFields
Exit_ConcatenateRecordsTxt:
Exit Function
Err_ConcatenateRecordsTxt:
MsgBox "Error " & Err.Number & ". " & Err.Description
Resume Exit_ConcatenateRecordsTxt
End Function
|
|
|
|
|