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

  • 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 
    	   IdadeCasos as (
    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)
      from IdadeCasos
      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 'FxEtaria2' then 'Adolescentes'
                      when 'FxEtaria3' then 'Adultos'
                      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 Giovani Cr sexta-feira, 2 de maio de 2014 15:32
    • Marcado como Resposta Wilson Boris sexta-feira, 2 de maio de 2014 15:41
    sexta-feira, 2 de maio de 2014 15:15