Usuário com melhor resposta
Agrupar por faixa etaria a partir da data de nascimento

Pergunta
-
Como eu faço a partir de uma data de nascimento gerar as faixas etárias e exibir tudo agrupado?
Eu criei uma Query que esta fazendo a separação por faixa etária a partir da conversão da idade, porém não consigo usar o group by.
select case when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) <= 20 then 'ate 20' when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) between 21 and 30 then 'de 21 a 30' when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) between 31 and 40 then 'de 31 a 40' when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) between 41 and 50 then 'de 41 a 50' when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) between 51 and 60 then 'de 51 a 60' when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) >= 61 then 'acima de 60' else convert(nvarchar(10), FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25)) end as faixa_idade , count(*) from Cliente group by DATA_NASCIMENTO
Respostas
-
Já pensou em usar uma tabela temporária?
create table #faixa ( faixa varchar(255) ); select case when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) <= 20 then 'ate 20' when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) between 21 and 30 then 'de 21 a 30' when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) between 31 and 40 then 'de 31 a 40' when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) between 41 and 50 then 'de 41 a 50' when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) between 51 and 60 then 'de 51 a 60' when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) >= 61 then 'acima de 60' else convert(nvarchar(10), FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25)) end as faixa_idade into #faixa from Cliente; select faixa, count(*) from #faixa group by faixa;
ficaria algo mais ou menos como o código acima!
- Marcado como Resposta CEFL terça-feira, 6 de maio de 2014 13:46
Todas as Respostas
-
Já pensou em usar uma tabela temporária?
create table #faixa ( faixa varchar(255) ); select case when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) <= 20 then 'ate 20' when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) between 21 and 30 then 'de 21 a 30' when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) between 31 and 40 then 'de 31 a 40' when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) between 41 and 50 then 'de 41 a 50' when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) between 51 and 60 then 'de 51 a 60' when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) >= 61 then 'acima de 60' else convert(nvarchar(10), FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25)) end as faixa_idade into #faixa from Cliente; select faixa, count(*) from #faixa group by faixa;
ficaria algo mais ou menos como o código acima!
- Marcado como Resposta CEFL terça-feira, 6 de maio de 2014 13:46
-
Bom dia,
CEFL, acho que você também pode utilizar uma CTE:
with CTE_Faixas as ( select case when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) <= 20 then 'ate 20' when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) between 21 and 30 then 'de 21 a 30' when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) between 31 and 40 then 'de 31 a 40' when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) between 41 and 50 then 'de 41 a 50' when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) between 51 and 60 then 'de 51 a 60' when FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25) >= 61 then 'acima de 60' else convert(nvarchar(10), FLOOR(DATEDIFF(DAY, DATA_NASCIMENTO, GETDATE()) / 365.25)) end as faixa_idade from Cliente ) select faixa_idade, count(*) as Quantidade from CTE_Faixas group by faixa_idade
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br