Usuário com melhor resposta
Select com Média

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;
Respostas
-
Deleted
- Marcado como Resposta Wilson Boris quinta-feira, 27 de fevereiro de 2014 01:08
-
Deleted
- Marcado como Resposta Wilson Boris quinta-feira, 27 de fevereiro de 2014 01:13
Todas as Respostas
-
-
-
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?
-
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;
-
-
-
Deleted
- Marcado como Resposta Wilson Boris quinta-feira, 27 de fevereiro de 2014 01:08
-
-
Deleted
- Marcado como Resposta Wilson Boris quinta-feira, 27 de fevereiro de 2014 01:13
-
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