Into table

Hola experto tengo este codigo funciona me muestra los datos que necesito, pero necesito agregar estos datos programas.pro_nombre, total y acumulados a una sola tabla no puedo hacerlo ayuda porfavor  gracias
winiac = thisform.text13.value
wini = thisform.text1.value
wfin = thisform.text2.value
************************************* totales
SELECT Conlima.pf_afil, Programas.pro_nombre,Conlima.pf_hospi, COUNT(Conlima.pf_servi)as total ;
FROM analisis!programas INNER JOIN analisis!conlima ;
ON Programas.pf_afil = Conlima.pf_afil ;
where betw(dtoc(conlima.pf_fecha,1),dtoc(wini,1),dtoc(wfin,1)) ;
GROUP BY Conlima.pf_afil;
ORDER BY Conlima.pf_afil;
into cursor compara
brow
select distin(pf_afil) as pro_codi, 0 as total0, 0 as acumu0 ;
from compara into table tabla
**brow
se le tabla
go top
scan
xprograma = alltrim(pro_codi)
sele compara
do while pf_afil = alltrim(xprograma)
do case
case pf_servi = '0'
xhospi = '0'
xtotal0 = total
endcase
sele tabla
do case
case xhospi = '0'
repla total0 with xtotal0
Endcase
Se le compara
skip
endd
Se le tabla
ends
**brow
************************************* fin totales ************************************* acumulados
SELECT Conlima.pf_afil, Programas.pro_nombre,Conlima.pf_hospi, COUNT(Conlima.pf_servi)as acumu ;
FROM analisis!programas INNER JOIN analisis!conlima ;
ON Programas.pf_afil = Conlima.pf_afil ;
where betw(dtoc(conlima.pf_fecha,1),dtoc(winiac,1),dtoc(wfin,1)) ;
GROUP BY Conlima.pf_afil;
ORDER BY Conlima.pf_afil;
into cursor compara
brow
se le tabla
go top
scan
xprograma = alltrim(pro_codi)
sele compara
do while pf_afil = alltrim(xprograma)
do case
case pf_servi = '0'
xhospi = '0'
xacumu0 = acumu
endcase
sele tabla
do case
case xhospi = '0'
repla acumu0 with xacumu0
Endcase
Se le compara
skip
endd
Se le tabla
ends
**brow
******************************* fin de acumulados

1 respuesta

Respuesta
1
Sin problema te ayudare, pero podrías darme un poco más detalle de que es lo que necesitas, por ej: tienes dos tablas, ¿en cada una se almacena que datos?, luego un pequeño bosquejo de la tabla final que quieres generar, por ej.
Programa Total Acumulado
---------------------------------------------------
xx 10 5
yy 5 20
¿Luego cuál es la diferencia de total y acumulado?, por que por lo que veo usas el mismo campo pf_servi y con la misma función que es count() pero no hay sum() para ambos query's, si me das un poco más de información enseguida te lo soluciono, solo necesito más datos.
Ok amigo muchas gracias disculpa la confianza pero que te parece si te envío mi programa solo es esta lineas y dos tablas como te mencione. Pero necesitaría tu correo, en todo caso envío el código más detallado ok gracias.
winiac=aqui coloco la fecha de inicio de año para acumulados
wini=aqui la fecha para lo totales
wfin=aqui se termina la fecha con winiac y wfin 
winiac = thisform.text13.value
wini = thisform.text1.value
wfin = thisform.text2.value
thisform.grid1.recordsource = ''
thisform.grid1.value = ''
thisform.grid1.REFRESH
************************************* totales
el count cuenta cuantos servicios se atendieron en diferentes programas y coloco total en esta tabla se muestra de esta manera agrupado por codigo + o - dice cuantos fueron 01 y cuantos fueron 02 etc.... los cuenta y lo coloca en total.
código nombre   hospi  total
01        tarjeta1    0       50
02        tarjeta2    0       60
03        tarjeta3    0       20 etc...
SELECT Conlima.pf_afil, Programas.pro_nombre,Conlima.pf_hospi, COUNT(Conlima.pf_servi)as total ;
FROM analisis!programas INNER JOIN analisis!conlima ;
ON Programas.pf_afil = Conlima.pf_afil ;
where betw(dtoc(conlima.pf_fecha,1),dtoc(wini,1),dtoc(wfin,1)) ;
GROUP BY Conlima.pf_afil;
ORDER BY Conlima.pf_afil;
into cursor compara
brow
Aquí estoy creando la tabla 0 as total0 para totales y 0 as acum0 para acumulados
se muestra hasta el momento de esta manera
pro_codi total0 acumu0
01 0 0
02 0 0
03 0 0
select distin(pf_afil) as pro_codi, 0 as total0, 0 as acumu0 ;
from compara into table principal
brow
se le principal
go top
scan
xprograma = alltrim(pro_codi)
sele compara
do while alltrim(pf_afil) = xprograma
do case
case pf_hospi = '   0'
xhospi = '   0'
xtotal0 = total
endcase
sele principal
do case
case xhospi = ' 0'
replace total0 with xtotal0  **** aqui es donde me sale un mensaje de error dice desbordamiento numerico cuando paso el mouse por el total0 muestra un mensaje de total0=* y el xtotal0 tiene el valor 137 que deberia reemplazar.
Endcase
Se le compara
skip
endd
Se le principal
ends
brow
************************************* fin totales
************************************* acumulados
esto hace lo mismo mencionado arriba lo unico que toma la fecha desde el winiac y wfin
SELECT Conlima.pf_afil, Programas.pro_nombre,Conlima.pf_hospi, COUNT(Conlima.pf_servi)as acumu ;
FROM analisis!programas INNER JOIN analisis!conlima ;
ON Programas.pf_afil = Conlima.pf_afil ;
where betw(dtoc(conlima.pf_fecha,1),dtoc(winiac,1),dtoc(wfin,1)) ;
GROUP BY Conlima.pf_afil;
ORDER BY Conlima.pf_afil;
into cursor compara
brow
se le principal
go top
scan
xprograma = alltrim(pro_codi)
sele compara
do while alltrim(pf_afil) = xprograma
do case
case pf_hospi = '   0'
xhospi = '   0'
xacumu0 = acumu
endcase
sele tabla
do case
case xhospi = ' 0'
repla acumu0 with xacumu0
Endcase
Se le compara
skip
endd
Se le tabla
ends
brow
El resultado seria de esta forma mostrado en una grilla
pro_codi total0 acumu0
01 300 700
02 400 800
03 100 380
04 20 70
M correo es [email protected], así aseguramos la
Partida y la respuesta sera solo una y certera.
Muchas gracias experto disculpa la molestias, estoy enviando los archivos
Disculpa la demora, como estuve de viaje en un congreso no pude responderte a tiempo, pero espero que no sea muy tarde, aunque no pude mirar con muchos detalles el código que tienes como dices te dará la información que precisas, puede darte alguna mejor solución, pero en virtud al tiempo te comento el motivo del error que te da y como solucionarlo,
Bueno, el error es desbordamiento numérico, es decir intentaste almacenar un valor mayor a la capacidad del campo, como puedes ver has creado una tabla con un sql, estos campos creados con AS te crearon con un campo numérico de 1 carácter, por tal motivo 837 no puede entrar en un campo Numérico(1), para solucionar esto podrías hacer
en vez de 0 as total0 usa
000000000 as total0 la cantidad de ceros indicara al sql que tamaño tendrá el campo total0, por lo tanto en este ejemplo te dará Numérico(10), bie, tu código ya no tendrá problemas, excepto que tengas un valor calculado mayor a 10 caracteres, ya sabes como solucionarlo, perfecto, bueno, no se si tu pregunta es solucionar el erro que te daba o buscar otras alternativas a tu SQL, bien, el sql puedes hacerlo en uno solo, pero te recomendarías que uses REPORTES para mostrar informaciones más fácilmente, pero aun así, si no es la respuesta que esperabas no dudes en preguntarme antes de finalizarlo.

Añade tu respuesta

Haz clic para o