none
Select com Média RRS feed

  • Pergunta

  • Abaixo eu tenho uma consulta que soma o número de casos de 7 anos e agrupa por faixas etárias no SQL Server 2008.

    Como poderia fazer a consulta retornando a média dos 7 anos?

    SELECT 'Crianças' AS Grupo,   
      COUNT(*) AS Total 
      FROM OJ_Prod AS C
     
      INNER JOIN PF AS B 
       ON B.id = C.cod_pf
      WHERE (DateDiff(Year, B.data_Nasc, C.data) <= 9) 
    
      UNION SELECT 'Adolescentes' AS Expr1, 
      COUNT(*) AS Expr2 
      FROM OJ_Prod AS C
     
      INNER JOIN PF AS B 
         ON B.id = C.cod_pf
      WHERE (DateDiff(Year, B.data_Nasc, C.data) >= 10) 
    
      AND (DateDiff(Year, B.data_Nasc, C.data) <= 19) 
      UNION SELECT 'Adultos' AS Expr1, 
      COUNT(*) AS Expr2 
      FROM OJ_Prod AS C 
     
      INNER JOIN PF AS B 
         ON B.id = C.cod_pf
      WHERE (DateDiff(Year, B.data_Nasc, C.data) >= 20) 
    
      AND (DateDiff(Year, B.data_Nasc, C.data) <= 59) 
      UNION SELECT 'Terceira Idade' AS Expr1, 
      COUNT(*) AS Expr2 
      FROM OJ_Prod AS C 
     
      INNER JOIN PF AS B 
         ON B.id = C.cod_pf
      WHERE (DateDiff(Year, B.data_Nasc, C.data) >= 60) 
    
      ORDER BY Total desc;

     
    quarta-feira, 26 de fevereiro de 2014 23:45

Respostas

Todas as Respostas

  • Deleted
    quinta-feira, 27 de fevereiro de 2014 00:19
  • Deleted
    quinta-feira, 27 de fevereiro de 2014 00:30
  • José Diz, obrigado pelo retorno.

    Nossa que blz a síntese, funcionou  100% as totalizações. Seria possível manter as classificações de faixa etária com um campo, pois está retornando para cada calssificação um campo.

    E como poderia ter as médias por ano?


    quinta-feira, 27 de fevereiro de 2014 00:30
  • Abaixo eu tenho uma consulta que soma o número de casos de 7 anos e agrupa por faixas etárias no SQL Server 2008.

    Como poderia fazer a consulta retornando a média dos 7 anos?

    SELECT 'Crianças' AS Grupo,   
      COUNT(*) AS Total 
      FROM OJ_Prod AS C
     
      INNER JOIN PF AS B 
       ON B.id = C.cod_pf
      WHERE (DateDiff(Year, B.data_Nasc, C.data) <= 9) 
    
      UNION SELECT 'Adolescentes' AS Expr1, 
      COUNT(*) AS Expr2 
      FROM OJ_Prod AS C
     
      INNER JOIN PF AS B 
         ON B.id = C.cod_pf
      WHERE (DateDiff(Year, B.data_Nasc, C.data) >= 10) 
    
      AND (DateDiff(Year, B.data_Nasc, C.data) <= 19) 
      UNION SELECT 'Adultos' AS Expr1, 
      COUNT(*) AS Expr2 
      FROM OJ_Prod AS C 
     
      INNER JOIN PF AS B 
         ON B.id = C.cod_pf
      WHERE (DateDiff(Year, B.data_Nasc, C.data) >= 20) 
    
      AND (DateDiff(Year, B.data_Nasc, C.data) <= 59) 
      UNION SELECT 'Terceira Idade' AS Expr1, 
      COUNT(*) AS Expr2 
      FROM OJ_Prod AS C 
     
      INNER JOIN PF AS B 
         ON B.id = C.cod_pf
      WHERE (DateDiff(Year, B.data_Nasc, C.data) >= 60) 
    
      ORDER BY Total desc;

     

    quinta-feira, 27 de fevereiro de 2014 00:32
  • É a média de registros por ano.

    Nós estamos totalizando o número de registros a partir do campo "data".

    quinta-feira, 27 de fevereiro de 2014 00:37
  • FÓRMULA DOS RESULTADOS:

    crianças=778/7

    adolescentes=481/7

    adultos=1078/7

    terceira idade=255/7

    Obs.: o 7(ano) deve ser obtido da soma dos anos do campo "data".

    quinta-feira, 27 de fevereiro de 2014 00:42
  • Deleted
    • Marcado como Resposta Wilson Boris quinta-feira, 27 de fevereiro de 2014 01:08
    quinta-feira, 27 de fevereiro de 2014 00:57
  • 100% José Diz.

    é possível inverter o retorno para o que é linha ser coluna e o que é coluna ser linha?

    quinta-feira, 27 de fevereiro de 2014 01:07
  • Deleted
    • Marcado como Resposta Wilson Boris quinta-feira, 27 de fevereiro de 2014 01:13
    quinta-feira, 27 de fevereiro de 2014 01:12
  • Sim; é só usar aplicar o operador relacional UNPIVOT no resultado.

    Bom trabalho.


        José Diz     Belo Horizonte, MG - Brasil


    Tentei com o código abaixo, mas sem sucesso.

    ;with 
    IdadeCasos as (
    SELECT B.id, year(C.data) as AnoCaso, DateDiff(year, B.data_nasc, C.data) as Idade
      from OJ_Prod as C inner join
           PF as B on B.id = C.cod_pf
    ),
    AnoaAno as (
    SELECT AnoCaso,
           Crianças= sum(case when Idade <= 9 then 1 else 0 end),
           Adolescentes= sum(case when Idade between 10 and 19 then 1 else 0 end),
           Adultos= sum(case when Idade between 20 and 59 then 1 else 0 end),
           [Terceira Idade]= sum(case when Idade >= 60 then 1 else 0 end)
      from IdadeCasos
      group by AnoCaso
    )
    SELECT cast('média' as sql_variant) as AnoCaso, avg(Crianças) as Crianças, avg(Adolescentes) as Adolescentes,
           avg(Adultos) as Adultos, avg([Terceira Idade]) as [Terceira Idade]
      from AnoaAno
    union
    SELECT * from AnoaAno p

    UNPIVOT (AnoCaso FOR IdadeCasos IN (Crianças, Adolescentes, Adultos, [Terceira Idade]) )AS UNPIVOT_IdadeCasos 

    quinta-feira, 27 de fevereiro de 2014 01:54