Usuário com melhor resposta
Somatório de Colunas

Pergunta
-
Olá Pessoal.
Preciso fazer uma Query para a seguinte situação:
Tenho registros de lançamentos em determinado período(07 de 2018) para várias contas. Pretendo efetuar o somatório de algumas contas em separado. Assim:
Mês Ano Conta Valor
07 2018 1A983 500,00
07 2018 1C456 300,00
07 2018 4E865 600,00
07 2018 5G988 500,00
Preciso somar as contas que iniciam com "1", "4" e "5" e também dar um resultado entre as contas, tipo ((4 + 5) -1)
Já tentei algumas coisas e não consegui. Dá muito erro na sintaxe.
Respostas
-
Boa tarde,
Se você pretende obter essas somas em uma única linha experimente fazer uns testes mais ou menos dessa forma:
with CTE_Sum as ( select Mes, Ano, sum(case when Left(Conta, 1) = '1' then Valor else 0 end) as Conta1, sum(case when Left(Conta, 1) = '4' then Valor else 0 end) as Conta4, sum(case when Left(Conta, 1) = '5' then Valor else 0 end) as Conta5 from Tabela where Mes = 7 and Ano = 2018 group by Mes, Ano ) select Mes, Ano, Conta1, Conta4, Conta5, Conta4 + Conta5 - Conta1 as Resultado from CTE_Sum
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Renato Reis1 quarta-feira, 18 de julho de 2018 22:13
- Não Marcado como Resposta Renato Reis1 quarta-feira, 18 de julho de 2018 23:13
- Marcado como Resposta Renato Reis1 sexta-feira, 20 de julho de 2018 13:24
Todas as Respostas
-
Boa tarde,
Se você pretende obter essas somas em uma única linha experimente fazer uns testes mais ou menos dessa forma:
with CTE_Sum as ( select Mes, Ano, sum(case when Left(Conta, 1) = '1' then Valor else 0 end) as Conta1, sum(case when Left(Conta, 1) = '4' then Valor else 0 end) as Conta4, sum(case when Left(Conta, 1) = '5' then Valor else 0 end) as Conta5 from Tabela where Mes = 7 and Ano = 2018 group by Mes, Ano ) select Mes, Ano, Conta1, Conta4, Conta5, Conta4 + Conta5 - Conta1 as Resultado from CTE_Sum
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Renato Reis1 quarta-feira, 18 de julho de 2018 22:13
- Não Marcado como Resposta Renato Reis1 quarta-feira, 18 de julho de 2018 23:13
- Marcado como Resposta Renato Reis1 sexta-feira, 20 de julho de 2018 13:24
-
sql.Add('SELECT ANO, MES, sum(case when Left(COSIF, 1) =:pCta1 then SALDO else 0 end) as Conta1, ');
sql.Add('sum(case when Left(COSIF, 2) =:pCta2 then SALDO else 0 end) as Conta2, ');
sql.add('sum(case when Left(COSIF, 3) =:pCta3 then SALDO else 0 end) as Conta3, ');
sql.add('sum(case when Left(COSIF, 4) =:pCta4 then SALDO else 0 end) as Conta4, ');
sql.add('sum(case when Left(COSIF, 6) =:pCta6 then SALDO else 0 end) as Conta6, ');
sql.add('sum(case when Left(COSIF, 7) =:pCta7 then SALDO else 0 end) as Conta7, ');
sql.add('sum(case when Left(COSIF, 8) =:pCta8 then SALDO else 0 end) as Conta8, ');
sql.add('sum(case when Left(COSIF, 9) =:pCta9 then SALDO else 0 end) as Conta9 ');
sql.add(' FROM SCCAFECH WHERE MES=:pMes and ANO=:pAno group by ANO, MES');
parameters.ParamByName('pMes').Value:=dbcMes.KeyValue;
parameters.ParamByName('pAno').Value:=dbcAno.KeyValue;
parameters.ParamByName('pCta1').Value:='1';
parameters.ParamByName('pCta2').Value:='2';
parameters.ParamByName('pCta3').Value:='3';
parameters.ParamByName('pCta4').Value:='4';
parameters.ParamByName('pCta6').Value:='6';
parameters.ParamByName('pCta7').Value:='7';
parameters.ParamByName('pCta8').Value:='8';
parameters.ParamByName('pCta9').Value:='9';
Eis o código que fiz, mas apenas Conta1 tem resultado. As outras contas tem resultado = Zero
- Editado Renato Reis1 quarta-feira, 18 de julho de 2018 23:14
-
Experimente deixar o segundo parâmetro da função Left igual a 1 em todas as linhas. Com esse parâmetro definimos quantos caracteres devem ser retornados pela função, e no seu caso deve ser retornado somente o primeiro caractere da esquerda.
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Junior Galvão - MVPMVP sábado, 21 de julho de 2018 18:06
-