Unir registros de varias filas en un solo campo si coincide la referencia

Necesito unir varios registros por fila en un solo campo si coincide la referencia.
Ejemplo:
REF          TECNICAS
100           TECNICA1
100           TECNICA2
100           TECNICA3
203           TECNICA1
205           Vacío
Por lo que quedaría el resultado
REF        UNIONTECNICAS
100        TECNICA1 | TECNICA2 | TECNICA3
203        TECNICA1
205
He probado con una consulta, estoy con access 2016 pero lo logro. Si con consulta no puedo realizarlo no sé cómo se haría en un formulario y que apareciese automáticamente unido en un campo al abrirlo.

1 respuesta

Respuesta
1

No creo que lo pueda hacer con una consulta, preparé este ejemplo con DAO. Utilizo una tabla auxiliar para ingresar el resultado de la concatenación.

TABLAS

FORMULARIO

CÓDIGO DEL BOTÓN Concatenar

Private Sub btnConcatenar_Click()
 On Error GoTo hay_error
  Dim rs1 As DAO.Recordset
  Dim rs2 As DAO.Recordset
  Dim strTecnicas As String
  CurrentDb.Execute "DELETE FROM tblunetecnicas"
  Set rs1 = CurrentDb.OpenRecordset("SELECT tbltecnicas.REF FROM tbltecnicas GROUP BY tbltecnicas.REF ORDER BY tbltecnicas.REF")
  Set rs2 = CurrentDb.OpenRecordset("SELECT * FROM tbltecnicas ORDER BY REF,TECNICAS")
  Do Until rs1.EOF
    strTecnicas = ""
    rs2.MoveFirst
    Do Until rs2.EOF
      If rs2!REF = rs1!REF Then
       If rs2!tecnicas <> "" Then
        strTecnicas = strTecnicas & rs2!tecnicas & "|"
       End If
      End If
      rs2.MoveNext
    Loop
    If strTecnicas <> "" Then
     strTecnicas = Left(strTecnicas, Len(strTecnicas) - 1)
     CurrentDb.Execute "INSERT INTO tblunetecnicas(REF,UNIONTECNICAS) VALUES(" & "'" & rs1!REF & "','" & strTecnicas & "'" & ")"
    End If
    rs1.MoveNext
  Loop
  rs1.Close
  rs2.Close
  Set rs1 = Nothing
  Set rs2 = Nothing
  Me.Requery
hay_error_exit:
    Exit Sub
hay_error:
      MsgBox Err.Number & " " & Err.Description, vbCritical, "Error.."
      Resume hay_error_exit
End Sub

¡Gracias, me ha funcionado correctamente!
De nuevo gracias por ello y que pase un buen día.

Me alegro, pero le dejo otra más rápida sin necesidad de crear la tabla, mediante una consulta y una función

Diseño consulta de agrupación

RESULTADO DE LA CONSULTA

FUNCION CONCATENA

Copie esta función en un módulo de VBA

Public Function concatena(strRef As String) As String
 Dim rs  As DAO.Recordset
 Dim strSQL As String
 strSQL = "Select TECNICAS From tbltecnicas where REF = '" & strRef & "'" & " AND TECNICAS<>Null"
 Set rs = CurrentDb.OpenRecordset(strSQL)
Do Until rs.EOF
    If concatena = "" Then
      concatena = rs.Fields(0)
    Else
     concatena = concatena & "|" & rs.Fields(0)
    End If
    rs.MoveNext
Loop
rs.Close
End Function

Mucho más simple.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas