none
Somar resultado de uma coluna no Case When RRS feed

  • Pergunta

  • Pessoal, 

    achei algumas das soluções para montar a minha query, porém não estou conseguindo mais caminhar só, poderiam me ajudar?

    Preciso somar os valores de cada código.

    minha query:

    SELECT  cnae_id =  
          CASE cnae_id  
             WHEN '4511101' THEN Sum(cnae_id)
             WHEN '4530703' THEN Sum(cnae_id)   
             WHEN '4541203' THEN Sum(cnae_id)   
             WHEN '4711301' THEN Sum(cnae_id)   
             WHEN '4731800' THEN Sum(cnae_id)   
             WHEN '4744005' THEN Sum(cnae_id)  
             WHEN '4751200' THEN Sum(cnae_id)   
             WHEN '4754701' THEN Sum(cnae_id)   
             WHEN '4781400' THEN Sum(cnae_id)   
             WHEN '4755501' THEN Sum(cnae_id)   
             WHEN '4759899' THEN Sum(cnae_id)   
             WHEN '4761002' THEN Sum(cnae_id)  
             WHEN '4771701' THEN Sum(cnae_id)   
          END,  
    cnae_descricao, faixa_func, nome_empresa, faixa_fatur, nome_fantasia, uf, telefone, qtd_func, email, endereco, contato, aniversario, cargo, obs, amostra_fixa, Ativo
      
    FROM tb_comercio  
    group by cnae_id,cnae_descricao, faixa_func, nome_empresa, faixa_fatur, nome_fantasia, uf, telefone, qtd_func, email, endereco, contato, aniversario, cargo, obs, amostra_fixa, Ativo
    ORDER BY cnae_id;  

    quinta-feira, 2 de março de 2017 15:12

Todas as Respostas

  • Olá filipemmaga precisamos saber o que vc precisa retornar no campo cnae_id  ??

    qual seria o resultado  esperado ?? 

    vc tem algum exemplo ?

    Por favor,  marque-o como respondidas se está respondeu a sua pergunta 
    ou marcá-lo como útil se está ajudou a resolver o seu problema 
    Wesley Neves
    MTA-Database Fundamentals 
    Analista Desenvolvedor.NET


    Wesley Neves

    quinta-feira, 2 de março de 2017 15:58
  • Wesley,

    Preciso trazer o total de cada cnae_id

    tenho 10 mil registros e os cnae_id que tenho são:

    4511101  
    4530703
    4541203
    4711301
    4731800
    4744005
    4751200
    4754701
    4781400
    4755501
    4759899
    4761002
    4771701

    quinta-feira, 2 de março de 2017 17:20
  • Partindo desse exemplo

     o campo 

    cnae_id e do tipo Int ou decimal ?

    pois acredito que não faz sentido usar o sum no campo cnae_id , pois acho que vc quer saber quantas vezes esses valores ocorrem na tabela.

    quais dados a mais vc vai precisar ??

    SELECT  cnae_id ,
            Total = SUM(cnae_id) ,
            Total2 = COUNT(cnae_id)
    FROM    tb_comercio
    WHERE   cnae_id IN ( '4511101', '4530703', '4541203', '4711301', '4731800',
                         '4744005', '4751200', '4754701', '4781400', '4755501',
                         '4759899', '4761002', '4771701' )
    GROUP BY cnae_id; 

    Por favor,  marque-o como respondidas se está respondeu a sua pergunta 
    ou marcá-lo como útil se está ajudou a resolver o seu problema 
    Wesley Neves
    MTA-Database Fundamentals 
    Analista Desenvolvedor.NET


    Wesley Neves


    • Editado Wesley Neves quinta-feira, 2 de março de 2017 17:50 correcao
    quinta-feira, 2 de março de 2017 17:50
  • Wesley,

    o campo é int mas olha o erro:

    Msg 8115, Level 16, State 2, Line 1
    Arithmetic overflow error converting expression to data type int.

    quinta-feira, 2 de março de 2017 17:57
  • Deleted
    quinta-feira, 2 de março de 2017 18:18
  • Wesley,

    o campo é int mas olha o erro:

    Msg 8115, Level 16, State 2, Line 1
    Arithmetic overflow error converting expression to data type int.

    Filipe,

    Provavelmente a soma de valores esta ultrapassando a capacidade de armazenamento ou faixa de valores reconhecidos ou suportados pelo tipo de dados Int, talvez seja necessário converter para BigInt.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 2 de março de 2017 18:53
  • Pessoal, 

    fiz a seguinte query:

    SELECT A.CNAE,B.cnae_descricao, count(A.CNAE) as total FROM pesq_industria as A inner join tb_industria as B on A.id_empresa = B.id WHERE A.cnae IN ( '14','15','151','16','17','18','19','20','21','22','23','24','241','242','25','26','27','28','29','30','31','32','33','34','35','36','361','37') AND data between convert(datetime,'01-02-2017',103) and convert(datetime,'28-02-2017',103) group by A.CNAE, B.cnae_descricao ORDER BY A.CNAE asc

    Agora está aparecendo B.cnae_descricao com algumas linhas null e não consigo fazer a soma.

    sexta-feira, 3 de março de 2017 19:00
  • Pessoal, 

    fiz a seguinte query:

    SELECT A.CNAE,B.cnae_descricao, count(A.CNAE) as total FROM pesq_industria as A inner join tb_industria as B on A.id_empresa = B.id WHERE A.cnae IN ( '14','15','151','16','17','18','19','20','21','22','23','24','241','242','25','26','27','28','29','30','31','32','33','34','35','36','361','37') AND data between convert(datetime,'01-02-2017',103) and convert(datetime,'28-02-2017',103) group by A.CNAE, B.cnae_descricao ORDER BY A.CNAE asc

    Agora está aparecendo B.cnae_descricao com algumas linhas null e não consigo fazer a soma.

    Isso acontece por que algum CNAE não possue descrição , vc pode verificar assim

    SELECT  A.CNAE ,
            B.cnae_descricao 
            
    FROM    pesq_industria AS A
            INNER JOIN tb_industria AS B ON A.id_empresa = B.id
    WHERE   A.cnae IN ( '14', '15', '151', '16', '17', '18', '19', '20', '21',
                        '22', '23', '24', '241', '242', '25', '26', '27', '28',
                        '29', '30', '31', '32', '33', '34', '35', '36', '361',
                        '37' )
            AND data BETWEEN CONVERT(DATETIME, '01-02-2017', 103)
                     AND     CONVERT(DATETIME, '28-02-2017', 103)
    				 AND B.cnae_descricao IS NULL
    ORDER BY A.CNAE ASC;

    Caso vc queria uma query que o Cnae tenha obrigatóriamente descrição ,vc pode adicionar no where o codigo 

     AND B.cnae_descricao IS NOT NULL

    Ou vc pode fazer assim

    WITH    Dados
              AS ( SELECT   CNAE = A.CNAE ,
                            cnae_descricao = ISNULL(B.cnae_descricao,
                                                    'Descrição não definida')
                   FROM     pesq_industria AS A
                            INNER JOIN tb_industria AS B ON A.id_empresa = B.id
                   WHERE    A.cnae IN ( '14', '15', '151', '16', '17', '18', '19',
                                        '20', '21', '22', '23', '24', '241', '242',
                                        '25', '26', '27', '28', '29', '30', '31',
                                        '32', '33', '34', '35', '36', '361', '37' )
                            AND data BETWEEN CONVERT(DATETIME, '01-02-2017', 103)
                                     AND     CONVERT(DATETIME, '28-02-2017', 103)
                 )
        SELECT  R.CNAE ,
                R.cnae_descricao ,
                COUNT(R.CNAE) AS total
        FROM    Dados R
        GROUP BY R.CNAE ,
                R.cnae_descricao
        ORDER BY R.CNAE ASC;

    Por favor,  marque-o como respondidas se está respondeu a sua pergunta 
    ou marcá-lo como útil se está ajudou a resolver o seu problema 
    Wesley Neves
    MTA-Database Fundamentals 
    Analista Desenvolvedor.NET


    Wesley Neves

    segunda-feira, 6 de março de 2017 11:52
  • Wesley,

    Obrigado e também a todos que ajudaram.

    Filipe Magalhães

    segunda-feira, 6 de março de 2017 12:59