select where com média de ano(jan a dez)

• Pergunta

• Alguém tem alguma sugestão para que o cálculo abaixo seja apenas dos anos que contenham todos os meses?

USE [pesquise]
GO
/****** Object:  StoredProcedure [dbo].[spTaxaAtaqueAARHFaixaEtaria]    Script Date: 02-05-2014 11:43:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[spTaxaAtaqueAARHFaixaEtaria]
AS
BEGIN
;with
SELECT B.id, year(C.data_Contato) as AnoCaso, DateDiff(year, B.data_nasc, C.data_Contato) as Idade
from OJ_Prod_AARH as C inner join
ag_Soc_PF as B on B.id = C.cod_pf
--where ...
),
AnoaAno as (
SELECT AnoCaso,
FxEtaria1= sum(case when Idade <= 9 then 1 else 0 end),
FxEtaria2= sum(case when Idade between 10 and 19 then 1 else 0 end),
FxEtaria3= sum(case when Idade between 20 and 59 then 1 else 0 end),
FxEtaria4= sum(case when Idade >= 60 then 1 else 0 end)
group by AnoCaso
),
MediaC as (
SELECT avg(FxEtaria1) as FxEtaria1, avg(FxEtaria2) as FxEtaria2,
avg(FxEtaria3) as FxEtaria3, avg(FxEtaria4) as FxEtaria4
from AnoaAno
),
Media as (
SELECT FxE, Casos
from MediaC
unpivot (Casos for FxE in ([FxEtaria1], [FxEtaria2], [FxEtaria3], [FxEtaria4])) as U
),
PopFxE as (
select
case
when FXETARIA <= 0909 then 'FxEtaria1'
when FXETARIA <= 1919 then 'FxEtaria2'
when FXETARIA <= 5959 then 'FxEtaria3'
else 'FxEtaria4'
end as FaixaEtaria,
sum(POPULACAO) as Populacao
from POPBR10
Where MUNIC_RES=411850
group by
case
when FXETARIA <= 0909 then 'FxEtaria1'
when FXETARIA <= 1919 then 'FxEtaria2'
when FXETARIA <= 5959 then 'FxEtaria3'
else 'FxEtaria4'
end
)
SELECT case M.FxE when 'FxEtaria1' then 'Criancas'
when 'FxEtaria4' then 'Terceira_idade' end as [GRUPO_ETARIO],
cast((1000. * (M.Casos / P.Populacao)) as decimal(8,2)) as [Taxa_Ataque]
--, M.Casos, P.Populacao
from Media as M inner join
PopFxE as P on P.FaixaEtaria = M.FxE
order by M.FxE;

END

sexta-feira, 2 de maio de 2014 15:00

Respostas

• Boa tarde,

Experimente dessa forma:

;with IdadeCasos as ( SELECT B.id, year(C.data_Contato) as AnoCaso, month(C.data_Contato) as MesCaso, DateDiff(year, B.data_nasc, C.data_Contato) as Idade from OJ_Prod_AARH as C inner join ag_Soc_PF as B on B.id = C.cod_pf --where ... ), AnoaAno as ( SELECT AnoCaso, FxEtaria1= sum(case when Idade <= 9 then 1 else 0 end), FxEtaria2= sum(case when Idade between 10 and 19 then 1 else 0 end), FxEtaria3= sum(case when Idade between 20 and 59 then 1 else 0 end), FxEtaria4= sum(case when Idade >= 60 then 1 else 0 end) from IdadeCasos group by AnoCaso having count(distinct MesCaso) = 12 ),

-- ...

Espero que ajude.

Assinatura: http://www.imoveisemexposicao.com.br

• Sugerido como Resposta sexta-feira, 2 de maio de 2014 15:32
• Marcado como Resposta sexta-feira, 2 de maio de 2014 15:41
sexta-feira, 2 de maio de 2014 15:15