Inquiridor
Somar resultado de uma coluna no Case When

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;
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.NETWesley Neves
-
-
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
-
-
-
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]
-
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.
-
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.NETWesley Neves
- Sugerido como Resposta Junior Galvão - MVPMVP sábado, 4 de novembro de 2017 11:52
-