none
Agrupar por faixa etaria a partir da data de nascimento RRS feed

  • 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

    terça-feira, 6 de maio de 2014 12:37

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
    terça-feira, 6 de maio de 2014 12:53

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
    terça-feira, 6 de maio de 2014 12:53
  • 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

    terça-feira, 6 de maio de 2014 13:11