Puede crear una función, por ejemplo
Function ConcatenarValores(CampoClave As String, CampoConcat As String) As String
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim sql As String
Dim resultado As String
Set db = CurrentDb
' SQL para seleccionar los valores que se concatenarán
sql = "SELECT " & CampoConcat & " FROM SuTabla WHERE CampoClave = '" & CampoClave & "'"
Set rs = db.OpenRecordset(sql)
' Recorrer los registros y concatenar los valores
Do While Not rs.EOF
If resultado <> "" Then
resultado = resultado & ", " & rs(CampoConcat)
Else
resultado = rs(CampoConcat)
End If
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Set db = Nothing
' Retornar el resultado concatenado
ConcatenarValores = resultado
End Function
Siga estos pasos:
1. Crear una nueva consulta de selección en Access.
2. Vaya al modo SQL de la consulta.
3. Use el siguiente SQL como referencia:
SELECT
Almacen,
Contrato,
Fecha,
STRING_AGG(servicio, ', ') AS servicios_concatenados
FROM
tu_tabla
GROUP BY
Almacen,
Contrato,
fecha;
Nota:
Almacen, Contrato, y Fecha son los campos en común.
El campo servicio es el que desea concatenar.
CampoClave en la función VBA debería ser un identificador único que distinga cada grupo, puedes modificarlo según sea necesario.
SuTabla es el nombre de su tabla o consulta original.
Alexis, si utiliza PostgreSQL lo puede hacer en una sola consulta, le dejo como ilustración y para que considere migrar a este servidor de datos. (Aunque en el foro alguien lo critica)
SELECT
Almacen,
Contrato,
Fecha,
STRING_AGG(servicio, ', ') AS servicios_concatenados
FROM
tu_tabla
GROUP BY
almacen,
contrato,
fecha;
Explicación:
STRING_AGG(servicio, ', '): Esta función toma los valores del campo servicio dentro de cada grupo y los concatena, separados por comas (o cualquier delimitador que elija).
GROUP BY almacen, contrato, fecha: Agrupa los registros por los campos almacen, contrato, y fecha, que son los campos que tienen valores iguales en cada grupo.