AYUDA CON CONSULTA URGENTE

07/07/2004 - 20:51 por Ing. Bernardo Cordoba - Previmedic S.A. | Informe spam
necesito realizar un informe de cantidad de pacientes agrupados por IPS y
por Sexo en rangos de edad que pertenezcan a Cartagena (muncodigo='001' y
depcodigo='13')

Rango 1 => 0-7 años
Rango 2 => 8-14 años
Rango 3 => 15-44 años
Rango 4 => 45-59 años
Rango 5 => mayores a 59 años

//Para lo anterior creo una tabla temporal donde calculo la edad de los
pacientes, ademas coloco los campos que necesito.
select ipscodigo as ips, afbsexo as sexo, afbfecnac as fechanac,
case
when month(afbfecnac) < month(getdate())
then
(year(getdate())-year(afbfecnac))
else
(year(getdate())-year(afbfecnac))-1
end as edad -- Calculo de la edad, teniendo en cuenta el mes
presente, asumo como error el dia.
into #beneficiarios
from afbenefi
where muncodigo='001' and depcodigo='13'

obteniendo este resultado
(32741 filas afectadas)

luego me toca hacer 5 consultas para los rangos de edad

select ips, sexo, count(sexo) as cantidad
from #beneficiarios
where edad between 15 and 44
group by sexo, ips
order by ips,sexo

ips sexo cantidad
0996 63
0996 F 1187
0996 M 623
1100100435 F 150
1100100435 M 32
1300101439 1
1300101439 F 3861
1300101439 M 1955
1609 F 2228
1609 M 944

(10 filas afectadas)

El problema esta en que toca hacer tantas consultas sean necesarias segun
los rangos de edades, ademas de esto el informe se debe presentar en el
siguiente informe ya que es para la actualizacion de una web.


IPS SEXO RANGO 1 RANGO 2 RANGO 3 RANGO 4 RANGO 5
 

Leer las respuestas

#1 Liliana Sorrentino
07/07/2004 - 21:21 | Informe spam
Hola Marcos,
Suponiendo que tenés entonces una función para calcular la edad, podrías
hacer por ejemplo:

SELECT ips, sexo, SUM(CASE WHEN calcularedad(nacimiento, getdate()) BETWEEN
0
AND 7 THEN 1 END) as '0-7',
SUM(CASE WHEN calcularedad(nacimiento, getdate()) BETWEEN 8 AND
14 THEN 1 END) as '8-14',
SUM(CASE WHEN calcularedad(nacimiento, getdate()) BETWEEN 15 AND
44 THEN 1 END) as '15-44',
SUM(CASE WHEN calcularedad(nacimiento, getdate()) BETWEEN 45 AND
59 THEN 1 END) as '45-59',
SUM(CASE WHEN calcularedad(nacimiento, getdate()) > 59 THEN 1 END) as '>
59'
FROM tabla
GROUP BY ips, sexo

Saludos... Liliana.


"Ing. Bernardo Cordoba - Previmedic S.A." escribió en
el mensaje news:
necesito realizar un informe de cantidad de pacientes agrupados por IPS y
por Sexo en rangos de edad que pertenezcan a Cartagena (muncodigo='001' y
depcodigo='13')

Rango 1 => 0-7 años
Rango 2 => 8-14 años
Rango 3 => 15-44 años
Rango 4 => 45-59 años
Rango 5 => mayores a 59 años

//Para lo anterior creo una tabla temporal donde calculo la edad de los
pacientes, ademas coloco los campos que necesito.
select ipscodigo as ips, afbsexo as sexo, afbfecnac as fechanac,
case
when month(afbfecnac) < month(getdate())
then
(year(getdate())-year(afbfecnac))
else
(year(getdate())-year(afbfecnac))-1
end as edad -- Calculo de la edad, teniendo en cuenta el mes
presente, asumo como error el dia.
into #beneficiarios
from afbenefi
where muncodigo='001' and depcodigo='13'

obteniendo este resultado
(32741 filas afectadas)

luego me toca hacer 5 consultas para los rangos de edad

select ips, sexo, count(sexo) as cantidad
from #beneficiarios
where edad between 15 and 44
group by sexo, ips
order by ips,sexo

ips sexo cantidad
0996 63
0996 F 1187
0996 M 623
1100100435 F 150
1100100435 M 32
1300101439 1
1300101439 F 3861
1300101439 M 1955
1609 F 2228
1609 M 944

(10 filas afectadas)

El problema esta en que toca hacer tantas consultas sean necesarias segun
los rangos de edades, ademas de esto el informe se debe presentar en el
siguiente informe ya que es para la actualizacion de una web.


IPS SEXO RANGO 1 RANGO 2 RANGO 3 RANGO 4 RANGO 5



Preguntas similares