
- Normalización
- Normalización
- Error -2147221503 [ODBC SQL Server ...
- Sql Server Backups
- sql server
- informe de consumo mensual
- rangos de fecha
- error con instancia en sql server 2005 express ...
- Conexion via Programacion a SQL SERVER 2008 R2
- Exportar datos desde un archivo de Texto a SQL ...

RE: AYUDA CON CONSULTA URGENTE
13/07/2004 - 19:49 por Ing. Bernardo Cordoba - Previmedic S.A. | Informe spam
Liliana:
Me podrias explicar como integro la funcion calcular edad a la consulta...
No he entendido bien..
gracias
mensaje
de
RETURNS
NOSEXO
escribió
alfin
recuerda
then
then
then
then
then
then
else
else
as
por
de
necesarias
en
Me podrias explicar como integro la funcion calcular edad a la consulta...
No he entendido bien..
gracias
"Liliana Sorrentino" <lsorrentino@mardelplata.gov.ar> escribió en el
mensaje
news:eoXSa6OZEHA.3480@TK2MSFTNGP11.phx.gbl...
> Hola Bernardo,
>
> La función para calcular edad va un poquito más en detalle que la que
> preparaste.
> Y después el query que la invoca, utilizando una tabla derivada en lugar
de
> la temporal.
> No conozco la información ni el volumen de la misma, así que el control
de
> performance queda en tus manos.
> Saludos... Liliana.
>
> CREATE FUNCTION calcularedad (@fecha datetime, @getdate datetime)
RETURNS
> smallint
> AS
> BEGIN
> DECLARE @edad smallint
> SELECT @edad = CASE WHEN MONTH( @fecha) > MONTH( @getdate)) OR
> MONTH( @fecha) = MONTH( @getdate) AND DAY(
@fecha)
> > DAY(@getdate))
> THEN YEAR( @getdate) - YEAR( @fecha) - 1
> ELSE YEAR( @getdate) - YEAR( @fecha) END
> RETURN @edad
> END
> GO
>
> SELECT
> ipsnombre,
> COUNT(case when sexo='M' and edad between 0 and 7 then sexo else null
> end) as Rango1M,
> COUNT(case when sexo='F' and edad between 0 and 7 then sexo else null
> end) as Rango1F,
> COUNT(case when sexo='M' and edad between 8 and 14 then sexo else null
> end) as Rango2M,
> COUNT(case when sexo='F' and edad between 8 and 14 then sexo else null
> end) as Rango2F,
> COUNT(case when sexo='M' and edad between 15 and 44 then sexo else null
> end) as Rango3M,
> COUNT(case when sexo='F' and edad between 15 and 44 then sexo else null
> end) as Rango3F,
> COUNT(case when sexo='M' and edad between 45 and 59 then sexo else null
> end) as Rango4M,
> COUNT(case when sexo='F' and edad between 45 and 59 then sexo else null
> end) as Rango4F,
> COUNT(case when sexo='M' and edad >` then sexo else null end) as
Rango5M,
> COUNT(case when sexo='F' and edad >` then sexo else null end) as
Rango5F,
> COUNT(case when sexo NOT IN('F','M') then sexo else null end) as
NOSEXO
> FROM (SELECT ipsnombre, afbsexo as sexo, calcularedad(afbfecnac,
getdate())
> as edad
> FROM afbenefi
> WHERE muncodigo='001' and depcodigo='13') AS persona_edad
> GROUP BY ipsnombre
> ORDER BY ipsnombre
>
>
>
> "Ing. Bernardo Cordoba - Previmedic S.A." <previmectg@enred.com>
escribió
en
> el mensaje news:ednrQ1HZEHA.2480@tk2msftngp13.phx.gbl...
> > Liliana, me parece bien esta consulta, de tanta vuelta que le di,
alfin
lo
> > realize utilizando case pero lo hago en la tabla temporal.
> >
> > me suena la idea tuya de hacer una funcion para calcular la edad y asi
> > elimino tener que crear una tabla emporal, pero como hago esto?
recuerda
> que
> > soy novato en transact sql.
> >
> > te envio el codigo que hice para que me arrojara lo 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
> > into #beneficiarios
> > from afbenefi
> > where muncodigo='001' and depcodigo='13'
> >
> > select
> > A.ipsnombre,
> > COUNT(case when B.sexo='M' then case when B.edad between 0 and 7 then
> > B.sexo else null end else null end)as Rango1M,
> > COUNT(case when B.sexo='F' then case when B.edad between 0 and 7 then
> > B.sexo else null end else null end)as Rango1F,
> > COUNT(case when B.sexo='M' then case when B.edad between 8 and 14
then
> > B.sexo else null end else null end)as Rango2M,
> > COUNT(case when B.sexo='F' then case when B.edad between 8 and 14
then
> > B.sexo else null end else null end)as Rango2F,
> > COUNT(case when B.sexo='M' then case when B.edad between 15 and 44
then
> > B.sexo else null end else null end)as Rango3M,
> > COUNT(case when B.sexo='F' then case when B.edad between 15 and 44
then
> > B.sexo else null end else null end)as Rango3F,
> > COUNT(case when B.sexo='M' then case when B.edad between 45 and 59
then
> > B.sexo else null end else null end)as Rango4M,
> > COUNT(case when B.sexo='F' then case when B.edad between 45 and 59
then
> > B.sexo else null end else null end)as Rango4F,
> > COUNT(case when B.sexo='M' then case when B.edad >` then B.sexo
else
> null
> > end else null end)as Rango5M,
> > COUNT(case when B.sexo='F' then case when B.edad >` then B.sexo
else
> null
> > end else null end)as Rango5F,
> > COUNT(case when B.sexo NOT IN('F','M') then B.sexo else null end)as
> NOSEXO
> > from #beneficiarios as B, dbgenerales..geipsesp as A
> > where B.ips=A.ipscodigo
> > group by A.ipsnombre
> > order by A.ipsnombre
> >
> >
> > ips rango1 rango2
> > M | F M | F
> >
> >
> > "Liliana Sorrentino" <lsorrentino@mardelplata.gov.ar> escribió en el
> mensaje
> > news:O0VDjcFZEHA.2456@TK2MSFTNGP10.phx.gbl...
> > > 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." <previmectg@enred.com>
> escribió
> > en
> > > el mensaje news:O2UpVIFZEHA.2840@TK2MSFTNGP11.phx.gbl...
> > > > 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 similare

Leer las respuestas