Seleccionar conjuntos de registros de una tabla

Trabajo con Access 2003 con una base de datos local donde tengo la tabla denominada rev_cat_porc_iter1 que se compone de los siguientes campos numéricos:
- ID_REV
- ID_CAT
- Porcentaje

Esta tabla ofrece una típica lista de vecinos con esta forma:
TABLA: rev_cat_porc_iter1 
ID_REV   ID_CAT    PORCENTAJE
100 267 13,88
100 345 10,75
100 518 7,89
100 784 6,91
100 862 5,85
200 206 22,89
200 487 14'09
200 543 12,77
300 267 10,48
300 702 9,57
300 718 5,69
300 804 4,19
300 892 3,50
300 906 3,29
400 487 29'02
400 513 11,78
500 667 14,99
500 745 10,60
500 918 6,29
500 985 6,18
600 862 45,85
700 206 23,01
700 491 13'08
700 531 10,34
800 323 32,45
Necesitaría su ayuda para diseñar una Macro o Código Visual (conozco muy poco de programación y de este lenguaje) que me permitiera ir recorriendo todos los registros de la tabla rev_cat_porc_iter1 e ir copiando los valores en una nueva tabla denominada new_tabla. Esta acción debería estar condicionada, de forma que, por cada grupo de registros cuyos valores en el campo ID_REV sean iguales, sólo se copien en la nueva tabla aquellos en los que la Suma de los valores que le corresponden en el campo PORCENTAJE alcance el umbral de 25. Para clarificar aún más el problema, dejo un ejemplo de cómo quedaría la tabla indicada más arriba:
TABLA: new_table
ID_REV   ID_CAT    PORCENTAJE
100 267 13,88
100 345 10,75
100 518 7,89
200 206 22,89
200 487 14'09
300 267 10,48
300 702 9,57
300 718 5,69
400 487 29'02
500 667 14,99
500 745 10,60
600 862 45,85
700 206 23,01
700 491 13'08
800 323 32,45
Como se puede apreciar en la nueva tabla, se han ido copiado los registros de la tabla inicial en la nueva hasta que la Suma de los valores del campo PORCENTAJE que le corresponde a cada registro con el mismo valor en el campo ID_REV alcanza o supera el umbral de 25. El ejemplo que he puesto aquí es de juguete, pues en la realidad, la tabla contiene un total de más de 1 millón de registros.
Espero que puedan ayudarme, pues llevo atascado en esta tarea mucho tiempo y no consigo avanzar.

1 respuesta

Respuesta
1
He llamado a las tablas: Documento a la origen y DocumentoNuevo al destino
Function AñadirDocumento()
Dim db As Database
Dim rs1 As Recordset
Dim rs2 As Recordset
Dim rs3 As Recordset
Dim vPorc As Double
Dim vRev As Double
Set db = CurrentDb
Set rs1 = db.OpenRecordset("DocumentoNuevo")
Set rs2 = db.OpenRecordset("Select Id_Rev from Documento group by Id_Rev")
Set rs3 = db.OpenRecordset("Select * from Documento order by id_rev, id_cat")
Do While Not rs2.EOF
Set rs3 = db.OpenRecordset("Select * from Documento where Id_rev=" & rs2!Id_Rev & " order by id_rev, id_cat")
vPorc = 0
Do While Not rs3.EOF
vPorc = vPorc + rs3!Porcentaje
If vPorc < 25 Then
rs1.AddNew
rs1!Id_Rev = rs3!Id_Rev
rs1!id_cat = rs3!id_cat
rs1!Porcentaje = rs3!Porcentaje
rs1.Update
Else
rs1.AddNew
rs1!Id_Rev = rs3!Id_Rev
rs1!id_cat = rs3!id_cat
rs1!Porcentaje = rs3!Porcentaje
rs1.Update
GoTo 1
End If
rs3.MoveNext
Loop
1
rs2.MoveNext
Loop
End Function
Muchísimas gracias. Voy a probar el código ahora mismo y veo que tal rendimiento me da. Sea como fuere, gracias por adelantado, de corazón.
Prometo volver con los resultados (es un poco complejo porque tarda mucho en ejecutarse el códgio al tener más de un millón de registros).
Saludos!
Espero que te sirva... ya me contarás
Gracias de nuevo! (Perdona por las mayúsculas, pero en este caso son de alegría).
Ha funcionado perfectamente. Pausadamente, porque hay muchos registros, pero va de lujo. Sólo tuve que modificar la ordenación de los registros en las sentencias SQL para que el orden fuera por ID_REV (ASC) y PORCENTAJE (DESC).
Gracias por ayudarme a salir del atolladero en el que estaba, pues mis conocimientos de Visual y de programación, son pocos.
Que tengas buen día!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas