Añadir campo calculado a consulta

Hola experto: De nuevo recurro a tu ayuda. Tengo la consulta C_importacion1 con dos campos que proceden de la importación de un fichero de texto.
Los datos de la consulta son los siguientes:
Campo1 Campo2
5680 Texto1
5681 Texto2
5682 Texto3
5683 Texto4
5680 Texto5
5681 Texto6
5682 Texto7
5680 Texto8
5681 Texto9
5680 Texto10
... ...
En esa consulta o en otra dependiente de esa, necesito crear un tercer campo llamado Campo3 con el valor "1" para el primer registro cuyo Campo1 sea 5680 ( el primer registro de Campo1 siempre será 5680 ), también deberá asignar "1" a los siguientes hasta que aparezca un nuevo 5680 en Campo1, en ese caso le sumaria 1 al anterior valor del Campo3 y así sucesivamente, es decir :
Campo1 Campo2 Campo3
5680 Texto1 1
5681 Texto2 1
5682 Texto3 1
5683 Texto4 1
5680 Texto5 2
5681 Texto6 2
5682 Texto7 2
5680 Texto8 3
5681 Texto9 3
5680 Texto10 4
... ...
¿Podrías ayudarme en como montarlo?
Gracias anticipadas.

1 respuesta

Respuesta
1
Lo que me pides no se puede realizar a través de una consulta, sino que necesitas código.
Te explico cómo puedes hacerlo:
1.- En un formulario que tengas (o si no creas uno en blanco) añades un botón de comando. Al evento "Al hacer click" le generas el siguiente código:
...
Private Sub...
'Creamos la Sql que agrupará los datos de [Campo1] por valores únicos
Dim valoresSql As String
valoresSql = "SELECT Tabla1.Campo1 FROM Tabla1"
valoresSql = valoresSql & " GROUP BY Tabla1.Campo1"
valoresSql = valoresSql & " ORDER BY Tabla1.Campo1"
'Creamos la Sql que nos creará la tabla TResultado
Dim miSql As String
miSql = "SELECT Tabla1.Campo1, Tabla1.Campo2, """" AS Campo3"
miSql = miSql & " INTO TResultado FROM Tabla1"
'Creamos la tabla TResultado
DoCmd.SetWarnings False
DoCmd.RunSQL miSql
DoCmd.SetWarnings True
'Creamos los recordset necesarios
'rstValores nos leerá los valores de valoresSql
'rst nos escribirá los resultados del [Campo3]
Dim contador As Long
Dim rstValores As Recordset
Dim rst As Recordset
Set rstValores = CurrentDb.OpenRecordset(valoresSql)
Set rst = CurrentDb.OpenRecordset("TResultado")
rstValores.MoveFirst
'Iniciamos el proceso
Do Until rstValores.EOF
contador = 1
rst.MoveFirst
Do Until rst.EOF
If rst.Fields("Campo1").Value = rstValores.Fields("Campo1").Value Then
With rst
.Edit
.Fields("Campo3").Value = contador
.Update
End With
contador = contador + 1
End If
rst.MoveNext
Loop
rstValores.MoveNext
Loop
'Lanzamos un mensaje de aviso
MsgBox "Proceso finalizado correctamente", vbInformation, "OK"
'Cerramos conexiones y liberamos memoria
rst.Close
rstValores.Close
Set rst = Nothing
Set rstValores = Nothing
End Sub
...
Tú debes cambiar los nombres que he utilizado en la consulta por los que tú tengas en tu BD. Las equivalencias son:
- Tabla1 -> tabla donde tienes los datos originales
- [Campo1], [Campo2] -> Los nombres de tus campos
- Puedes cambiar [Campo3] también por el nombre que quieras.
Si tienes algún problemilla me comentas. Ya me dirás qué tal te ha ido.
Va de perlas. Yo lo estaba intentando con un recorset sobre la consulta, pero no había forma. Tu solución es justo lo que necesitaba. Gracias de nuevo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas