Sumar datos de una tabla en vsual foxpro

Bueno la duda que tengo es la siguiente:
Tengo 2 tablas:
tabla1
Código
Nombres
Apellidos
tabla2
Mes
Año
diaspermiso
diasferiados
diastotal
codigo(relacion con tabla1)
donde  diastotal deberia ser =diasferiados+diastotal
quisera saber como los sumo y tambien mostrarlo en un formulario por meses y años
ADICIONALMENTE al buscar por codigo me muestre los datos de la tabla1 y tabla2
Es todo hasta pronto

1 respuesta

Respuesta
1
Ronald:
No te entendí algo, y es que "diastotal deberia ser =diasferiados+diastotal". ¿No debería ser "diastotal = diasferiados + diaspermiso"? Voy a suponer esto. También dejo el campo "año" escrito así como lo escribiste, aunque esto me trajo dudas, ¿puede haber un campo con "eñe"? Creería que no.
Es sencillo lo que estás pidiendo. Te voy a dar una explicación detallada, para que no solo entiendas el resultado sino que además entiendas la lógica de cómo llegar a eso. Para lograr lo que estás buscando tenés que hacer un SELECT con JOIN. Con el SELECT combinás ambas tablas en un cursor para mostrarlas en pantalla, mediante la cláusula JOIN. Ahora bien, existen tres tipos de JOIN: LEFT JOIN, RIGHT JOIN e INNER JOIN.
Vos planteaste que la relación es tabla1. codigo = tabla2. Código. Entonces:
Con el LEFT JOIN, el SELECT va a traer un registro cada vez que exista un registro en la tabla que está declarada a la izquierda del JOIN. En este caso, sería tabla1, sin importar que en la segunda tabla no exista información para el código de la tabla1. Con el RIGHT JOIN, lo mismo pero la coincidencia se basa en tabla2 (a la derecha). Y el INNER JOIN quiere decir que va a traer un registro por CADA COINCIDENCIA EXACTA entre las dos tablas. O sea, por ejemplo, si vos tenés un código de empleado en la tabla1 pero no tenés información en la tabla2, el SELECT no va a incluir ese empleado en el cursor resultante.
Ahora, yo pienso que para lo que vos pretendés, lo que tendríamos que utilizar es el LEFT JOIN. Que para cada empleado traiga un registro, y si no hay nada detallado en la tabla 2, que traiga todo en cero.
El LEFT JOIN, si no tiene registros en la tabla2 que coincidan con la tabla1, te va a traer valores nulos, que tampoco es lo que queremos. Para remediar eso, utilizaremos la función ISNULL() de VFP.
La sintaxis de lo que querés hacer quedaría así:
SELECT tabla1.codigo, tabla1.nombres, tabla1.apellidos, IIF(ISNULL(tabla2.mes),00,tabla2.mes) AS mes, IIF(ISNULL(tabla2.año),0000,tabla2.año) AS año, IIF(ISNULL(tabla2.diaspermiso),00,tabla2.diaspermiso) AS diaspermiso, IIF(ISNULL(tabla2.diasferiados),00,tabla2.diasferiados) AS diasferiados, IIF(ISNULL(tabla2.diaspermiso),00,tabla2.diaspermiso+tabla2.diasferiados) AS diastotal FROM tabla1 LEFT JOIN tabla2 ON tabla1.codigo = tabla2.codigo INTO CURSOR cursor_consulta
Después de este comando, vas a tener un cursor llamado "cursor_consulta" con toda la información que querías.
Como ves, utilicé el IIF para preguntarle a FoxPro si los campos de la tabla2 vienen nulos. De venir nulos, los formateé para que me trajeran campos en cero (puse más de un cero para ajustar la dimensión). En este caso, presumí que tanto los campos mes como año eran numéricos. De no ser así, hay que formatearlos con SPACE(n) donde "n" es la dimensión del campo carácter.
Espero que te sirva. Cualquier cosa volveme a preguntar si algo te dejó dudas.
Slds.
Martín.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas