none
Somatório de Colunas RRS feed

  • 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. 

    quarta-feira, 18 de julho de 2018 18:20

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
    quarta-feira, 18 de julho de 2018 18:36

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
    quarta-feira, 18 de julho de 2018 18:36
  •       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
    quarta-feira, 18 de julho de 2018 22: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

    quinta-feira, 19 de julho de 2018 12:30
  • Sim Gapimex, perfeito. Foi distração minha. Mto obrigado.
    sexta-feira, 20 de julho de 2018 13:25