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


"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

#1 Liliana Sorrentino
13/07/2004 - 19:53 | Informe spam
Hola Bernardo,

En el FROM de la consulta no está usando la tabla afbenefi, sino
persona_edad, es lo que se llama "tabla derivada".
Uno de los datos de esa tabla persona_edad, es la edad calculada en la
función a la que está haciendo referencia, esa es toda la vinculación que
necesitás una vez que la función está creada como te indicaba en el ejemplo.

Saludos... Liliana.

"Ing. Bernardo Cordoba - Previmedic S.A." escribió en
el mensaje news:
Mostrar la cita
lugar
Mostrar la cita
control
Mostrar la cita
null
Mostrar la cita
null
Mostrar la cita
null
Mostrar la cita
null
Mostrar la cita
null
Mostrar la cita
null
Mostrar la cita
null
Mostrar la cita
null
Mostrar la cita
asi
Mostrar la cita
then
Mostrar la cita
then
Mostrar la cita
getdate())
Mostrar la cita
END)
Mostrar la cita
fechanac,
Mostrar la cita
el
Mostrar la cita
presentar
Mostrar la cita
#2 Ing. Bernardo Cordoba - Previmedic S.A.
14/07/2004 - 15:20 | Informe spam
Listo, me parece muy bien... veo que tienes mucha experiencia en esto, veo
que con tigo puedo aprender mucho...

Ahora si entiendo el codigo, me puse ha analizarlo, pero cuando lo corro en
SQL (analizador de consultas me arroja el siguiente error:

"calcularedad" no es un nombre de funcion reconocida...

otra cosa corro el codigo o funcion donde creo el objeto calcularedad
y me dice que ya hay una en la base de dtaos, me imagino que esta se creo
cuando corry el query, como la elimino de la base de datos?


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 ipscodigo,
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 ipscodigo, afbsexo as sexo, calcularedad(afbfecnac,getdate())as
edad
FROM afbenefi
WHERE muncodigo='001' and depcodigo='13') AS persona_edad
GROUP BY ipscodigo
ORDER BY ipscodigo

Tu perdona por tanto abuso de tu ayuda...

Bernardo Cordoba

"Liliana Sorrentino" escribió en el mensaje
news:
Mostrar la cita
ejemplo.
Mostrar la cita
en
Mostrar la cita
consulta...
Mostrar la cita
que
Mostrar la cita
44
Mostrar la cita
44
Mostrar la cita
59
Mostrar la cita
59
Mostrar la cita
end)as
Mostrar la cita
el
Mostrar la cita
AND
Mostrar la cita
AND
Mostrar la cita
agrupados
Mostrar la cita
edad
Mostrar la cita
#3 Liliana Sorrentino
14/07/2004 - 15:44 | Informe spam
Hola Bernardo,
Hay muchos compañeros en este grupo que con gusto te ayudarán, y de los que
aprendo algo cada día.

Fijate de llamar a la función con el nombre completo:
BasedeDatos.Propietario.NombreFuncion.
Para borrar una función, DROP FUNCTION NombreFunción.
En la ayuda encontrarás mucha información.

Saludos... Liliana.

"Ing. Bernardo Cordoba - Previmedic S.A." escribió en
el mensaje news:
Mostrar la cita
en
Mostrar la cita
Rango5M,
Mostrar la cita
Rango5F,
Mostrar la cita
calcularedad(afbfecnac,getdate())as
Mostrar la cita
mensaje
Mostrar la cita
que
Mostrar la cita
escribió
Mostrar la cita
else
Mostrar la cita
else
Mostrar la cita
else
Mostrar la cita
else
Mostrar la cita
else
Mostrar la cita
else
Mostrar la cita
else
Mostrar la cita
else
Mostrar la cita
as
Mostrar la cita
as
Mostrar la cita
as
Mostrar la cita
di,
Mostrar la cita
y
Mostrar la cita
necesito:
Mostrar la cita
fechanac,
Mostrar la cita
7
Mostrar la cita
7
Mostrar la cita
14
Mostrar la cita
14
Mostrar la cita
B.sexo
Mostrar la cita
B.sexo
Mostrar la cita
en
Mostrar la cita
edad,
Mostrar la cita
AND
Mostrar la cita

Mostrar la cita
cuenta
Mostrar la cita
web.
Mostrar la cita
#4 Miguel Egea
14/07/2004 - 20:07 | Informe spam
Buenas bernardo y con permiso de liliana
Ejecuta esta instruccio´n y dinos que devuelve

select name,user_name(uid) from sysobjects where xtype ='fn'


-

Miguel Egea Gómez
Webmaster de PortalSQL

(lo de online sobra)
Brigada Anti-Cursores
Microsoft SqlServer M.V.P.

"Ing. Bernardo Cordoba - Previmedic S.A." escribió en
el mensaje news:
Te entiendo... por lo del correo..
Estoy verificando y en el enterprise manager de sql en la base de datos no
aparece la funcion que creo en el analizador de consultas, pero en esta
caundo visualizo los objetos si aparece. Obviamente actualizando el
anterior.

Ya habia encontrado como eliminar una funcion creada en el query, pero igual
no me deja utilizarla,

FROM (SELECT ipscodigo, afbsexo as sexo, calcularedad(afbfecnac,getdate())as
edad

Debo hacer esto dbafiliados.calcularedad(afbfecnac,getdate()) as edad
Pero al hacerlo iguam me sale el error "El nombre del objeto
dbafiliados.calcularedad no es valido"

Cuando corro el query para generar la funcion esta me sale Correcto..

El problema es cuando lo utilizo...

BCG


"Liliana Sorrentino" escribió en el mensaje
news:
Mostrar la cita
que
Mostrar la cita
en
Mostrar la cita
veo
Mostrar la cita
creo
Mostrar la cita
NOSEXO
Mostrar la cita
el
Mostrar la cita
la
Mostrar la cita
en
Mostrar la cita
edad
Mostrar la cita
esto?
Mostrar la cita
and
Mostrar la cita
and
Mostrar la cita
and
Mostrar la cita
and
Mostrar la cita
and
Mostrar la cita
and
Mostrar la cita
and
Mostrar la cita
and
Mostrar la cita
15
Mostrar la cita
45
Mostrar la cita
1
Mostrar la cita
la
Mostrar la cita
Ads by Google
Search Busqueda sugerida