PDA

Ver la Versión Completa : Totales de sumatorias


Behemot
01-05-2010, 07:57:53
Hola a todos, haber si me pueden ayudar con esto, el siguiente código funciona perfecto:

SELECT di.cod_diag, di.des_diag, sum(1) as cantidad,
SUM( Case pa.cod_sexo when 'F' then 1 else 0 end ) as SF,
SUM( Case pa.cod_sexo when 'M' then 1 else 0 end ) as SM,
SUM( Case when (hc.edad >=0 and hc.edad<=18 and pa.cod_sexo='F') then 1 else 0 end) rangoF1,
SUM( Case when (hc.edad >18 and hc.edad<=35 and pa.cod_sexo='F') then 1 else 0 end) rangoF2,
SUM( Case when (hc.edad >35 and hc.edad<=49 and pa.cod_sexo='F') then 1 else 0 end) rangoF3,
SUM( Case when (hc.edad >=50 and hc.edad<=120 and pa.cod_sexo='F') then 1 else 0 end) rangoF4,

SUM( Case when (hc.edad >=0 and hc.edad<=18 and pa.cod_sexo='M') then 1 else 0 end) rangoM1,
SUM( Case when (hc.edad >18 and hc.edad<=35 and pa.cod_sexo='M') then 1 else 0 end) rangoM2,
SUM( Case when (hc.edad >35 and hc.edad<=49 and pa.cod_sexo='M') then 1 else 0 end) rangoM3,
SUM( Case when (hc.edad >=50 and hc.edad<=120 and pa.cod_sexo='M') then 1 else 0 end) rangoM4



FROM TBL_HC_OFTALMOLOGIA_ hc

LEFT JOIN tbl_pacientes_ pa ON pa.clave = hc.clv_paciente
LEFT JOIN tbl_diagnosticos_ di ON di.cod_diag = hc.cod_diag1


WHERE 1=1

AND (hc.estatus = 'A' )
AND (hc.cod_diag1>=:CodDiagIni) AND (hc.cod_diag1<=:CodDiagFin)
AND (pa.cod_entidad>=:CodEntidadIni) AND (pa.cod_entidad<=:CodEntidadFin)
AND (hc.fecha >= :fechaini AND hc.fecha <= :fechafin)
AND (hc.edad >= :EdadIni AND hc.edad <= :EdadFin)
AND (hc.tipo_edad >= :TipoEdadIni AND hc.tipo_edad <= :TipoEdadFin)
AND (pa.cod_sexo >= :GeneroIni AND pa.cod_sexo <= :GeneroFin)
AND (hc.clv_usuario >= :ProfesionalIni AND hc.clv_usuario <= :ProfesionalFin)

GROUP BY di.cod_diag, di.des_diag
order by 3 desc

Lo que quiero ahora es saber el total del los rangos: rangoF1, rangoF2, ....
que debo hacer? no importa si es en otro SELECT diferente. Muchas Gracias.

santiago14
02-05-2010, 18:13:18
Lo que quiero ahora es saber el total del los rangos: rangoF1, rangoF2, ....
que debo hacer? no importa si es en otro SELECT diferente. Muchas Gracias.

No está claro, ¿acaso el SUM no te devuelve el total por cada rango? Estás sumando 0 ó 1 según el CASE lo indica, claramente esa expresión te daría el total por rango.

Necesitaría que seas un poco mas específico

Behemot
02-05-2010, 19:10:51
Hola Santiago14 gracias por tu interes, si, efectivamente tengo los totales por cada codigo y cada rango lo que necesito es sumar el total de la columna por cada rango, espero ahora me entiendas, ejemplo:


CODIGO RANGOF1 RANGOF2
-H234--------2--------5 <- ESTE ESTOTAL QUE ME DA EL SUM()
-H526--------4--------2
---------------------------
--------------6--------7 <-ESTE ES EL TOTAL QUE BUSCO

Gracias.

santiago14
04-05-2010, 00:49:53
SELECT
SUM( Case pa.cod_sexo when 'F' then 1 else 0 end ) as SF,
SUM( Case pa.cod_sexo when 'M' then 1 else 0 end ) as SM,
SUM( Case when (hc.edad >=0 and hc.edad<=18 and pa.cod_sexo='F') then 1 else 0 end) rangoF1,
SUM( Case when (hc.edad >18 and hc.edad<=35 and pa.cod_sexo='F') then 1 else 0 end) rangoF2,
SUM( Case when (hc.edad >35 and hc.edad<=49 and pa.cod_sexo='F') then 1 else 0 end) rangoF3,
SUM( Case when (hc.edad >=50 and hc.edad<=120 and pa.cod_sexo='F') then 1 else 0 end) rangoF4,

SUM( Case when (hc.edad >=0 and hc.edad<=18 and pa.cod_sexo='M') then 1 else 0 end) rangoM1,
SUM( Case when (hc.edad >18 and hc.edad<=35 and pa.cod_sexo='M') then 1 else 0 end) rangoM2,
SUM( Case when (hc.edad >35 and hc.edad<=49 and pa.cod_sexo='M') then 1 else 0 end) rangoM3,
SUM( Case when (hc.edad >=50 and hc.edad<=120 and pa.cod_sexo='M') then 1 else 0 end) rangoM4

FROM TBL_HC_OFTALMOLOGIA_ hc

LEFT JOIN tbl_pacientes_ pa ON pa.clave = hc.clv_paciente
LEFT JOIN tbl_diagnosticos_ di ON di.cod_diag = hc.cod_diag1

WHERE 1=1

AND (hc.estatus = 'A' )
AND (hc.cod_diag1>=:CodDiagIni) AND (hc.cod_diag1<=:CodDiagFin)
AND (pa.cod_entidad>=:CodEntidadIni) AND (pa.cod_entidad<=:CodEntidadFin)
AND (hc.fecha >= :fechaini AND hc.fecha <= :fechafin)
AND (hc.edad >= :EdadIni AND hc.edad <= :EdadFin)
AND (hc.tipo_edad >= :TipoEdadIni AND hc.tipo_edad <= :TipoEdadFin)
AND (pa.cod_sexo >= :GeneroIni AND pa.cod_sexo <= :GeneroFin)
AND (hc.clv_usuario >= :ProfesionalIni AND hc.clv_usuario <= :ProfesionalFin)

Yo creo que con esto basta, es en una consulta por aparte.
Al no tener que agrupar por los campos anteriores al SUM, directamente hará las sumas totales.
Le he sacado Group by y Order by no es necesario.
No lo he probado así que el Where hay que depurarlo un poco. En especial tengo dudas con los campos SF y SM, no estoy seguro si afectan a la sumatoria final o no.
Bien, me dirás como va la cosa.
Espero haber ayudado.

Saludos.

santiago14
04-05-2010, 00:58:22
Claro que a posteriori de las dos consultas habrá que ponerlas en la grilla o en el componente que estés usando con un poco de programación.

Behemot
04-05-2010, 07:21:05
Santiago14, hermano muchas muchas gracias, funciono a la perfección no movi absolutamente nada, nuevamente gracias.

PD. Esto lo estoy usando en el Report Manager. Otra pregunta, es que trate de mandar tablas por parámetro, pero la verdad creo que ni cerca estuve de hacerlo funcionar, como vez la tabla se llama OFTALOMOLOGIA pues tengo OPTOMETRIA, DERMATOLOGIA, NEUROLOGIA, ETC y esas tablas manejan la misma estructura y quería un solo reporte para todas. Te agradecería que me pudieras ayudar con esto.

Si quieres saber más de mi proyecto aquí te dejo la dirección ww.medicad.net

Saludos...

santiago14
06-05-2010, 14:10:16
Bueno, no uso demasiado Report Manager pero creo que está montado sobre un form, por lo cual deberías poder pasar las tablas como si fueran variables comunes.
Es mas, podrías pasar los "nombres de las tablas" o los resultados de la consulta.
No creo haber ayudado mucho en esto pero en una de esas...

javave
18-08-2010, 18:27:26
Hola amigos qué tal?

Epa soy novato en Delphi, apenas empecé a usarlo ayer.

Estoy creando un programita para familiarizarme con Delphi. Sin embargo, tengo una duda que me está matando:mad::confused::

Estoy creando una condición y necesito saber cómo hago para extraer los datos de un EDIT para poder aplicar la condición.

Hasta ahora tengo este código:

var
prueba: Double;

begin
prueba := StrToFloat(Valor.Text);
prueba := Format([prueba]);
if isNAN(prueba) then
ShowMessage ('Lo que introdujo no es un número')
end.

Donde <<Valor>> es es nombre del EDIT donde el usuario introduce los números.

El objetivo es que el programa avise cuando el usuario introduce letras en ese EDIT. El programita que estoy desarrollando es un conversor.:D

Gracias espero su respuesta.

afunez2007
18-08-2010, 18:36:30
Hola amigos qué tal?

Epa soy novato en Delphi, apenas empecé a usarlo ayer.

Estoy creando un programita para familiarizarme con Delphi. Sin embargo, tengo una duda que me está matando:mad::confused::

Estoy creando una condición y necesito saber cómo hago para extraer los datos de un EDIT para poder aplicar la condición.

Hasta ahora tengo este código:
Código Delphi [-] (http://www.clubdelphi.com/foros/#)var prueba: Double; begin prueba := StrToFloat(Valor.Text); prueba := Format([prueba]); if isNAN(prueba) then ShowMessage ('Lo que introdujo no es un número') end.

Donde <<Valor>> es es nombre del EDIT donde el usuario introduce los números.

El objetivo es que el programa avise cuando el usuario introduce letras en ese EDIT. El programita que estoy desarrollando es un conversor.:D

Gracias espero su respuesta.

Como vino a dar esto aqui?? si es de otro post!!

Saludos