none
Retornar um calculo de duas linhas em um resultado unico. RRS feed

  • Pergunta

  • Bom dia, meu problema é o seguinte. Eu tenho uma tabela RECPAG com a seguinte estrutura:

    CODBANCO           RECPAG        NOMEBANCO       VALOR      VALMOV

    1                             P                 CAIXA                -100         15.000

    1                             R                 CAIXA                -100         30.100

    A coluna VALOR é o valor inicial e esta agrupado;

    A coluna VALMOV é uma SUM de todas as movimentações;

    O que preciso é pegar o valor inicial, que estar igual para P ou R, e se for P fazer VALOR - VALMOCV (o valor as vezes está negativo) e depois pegar esse resultado e somar com o VALMOV de R. Retornando tudo em uma única linha assim:

    CODBANCO                 NOMEBANCO       VALOR      VALMOVATUAL

    1                                  CAIXA                -100            15.000

    Obrigado desde já.

    terça-feira, 29 de outubro de 2019 14:06

Respostas

Todas as Respostas

  • Deleted
    terça-feira, 29 de outubro de 2019 14:23
  • Bom dia, meu problema é o seguinte. Eu tenho uma tabela RECPAG com a seguinte estrutura:

    CODBANCO           RECPAG        NOMEBANCO       VALOR      VALMOV

    1                             P                 CAIXA                -100         15.000

    1                             R                 CAIXA                -100         30.100

    A coluna VALOR é o valor inicial e esta agrupado;

    A coluna VALMOV é uma SUM de todas as movimentações;

    O que preciso é pegar o valor inicial, que estar igual para P ou R, e se for P fazer VALOR - VALMOCV (o valor as vezes está negativo) e depois pegar esse resultado e somar com o VALMOV de R. Retornando tudo em uma única linha assim:

    CODBANCO                 NOMEBANCO       VALOR      VALMOVATUAL

    1                                  CAIXA                -100            15.000

    Obrigado desde já.

    Mateus,

    Por acaso estamos fazendo referência ao conceito de Livro Caixa? É isso mesmo, temos um saldo inicial e conforme a movimentação esta sendo vai sendo atualizado para mais ou para menos.

    Estou certo?


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 29 de outubro de 2019 17:27
  • José obrigado pela ajuda, sou iniciante em SQL e já me ajudou muito, porém não deu certo.

    No caso esse VALMOV é uma SUM de uma outra tabela onde tem os valores de movimentação, então quando tento usar aparece esse erro.

    Não é possível executar uma função de agregação em uma expressão que contenha uma agregação ou uma subconsulta.

    Minha query está assim.

    SELECT 
    B.CODBANCO, 
    V.RECPAG,
    N.NOMEBANCO,
    B.VALOR,
    V.SUM(V.VALOR),
     
           B.VALOR + sum (case when V.RECPAG = 'P' then -sum(V.valor) else -sum(V.valor) end) as VALMOVATUAL
      
     
    FROM B, V, N
    GROUP BY B.CODBANCO, V.VALOR, V.RECPAG, N.NOMEBANCO
    ORDER BY B.CODBANCO

    terça-feira, 29 de outubro de 2019 17:40
  • Deleted
    terça-feira, 29 de outubro de 2019 17:47
  • Mateus,

    Respeitando o seu Select, veja se este exemplo baseado em Derived Table poderá lhe ajudar:

    Select CodBanco, RecPag, NomeBanco, Valor, VALOR + sum (case when RECPAG = 'P' then -VALMOV else VALMOV end) as VALMOVATUAL From (SELECT B.CODBANCO, V.RECPAG, N.NOMEBANCO, B.VALOR, SUM(V.VALOR) as VALMOV FROM B, V, N -- Cuidado você vai ter um resultado gerado através de um produto cartesiano -- GROUP BY B.CODBANCO, V.VALOR, V.RECPAG, N.NOMEBANCO) As A

    Group By CodBanco, RecPag, NomeBanco, Valor Go

    Este é somente um exemplo, um esboço, pode conter erros. Como já destacado estou levando em consideração o seu Select inicial, verifique também a declaração das tabelas B, V, N você vai forçar uma junção cruzada entre as linhas de cada tabela, sendo estas multiplicadas entre si provocando um produto cartesiano ao final.

    Avalie as possibilidades de você estabelecer as devidas e corretas junções entre estas tabelas.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]



    terça-feira, 29 de outubro de 2019 18:03
  • Ótimo, deu certo. só mais uma coisa, eu conseguiria juntar agora os resultados em uma unica linha.

    Está assim:

    CODBANCO       RECPAG        BANCO       VALMOVATUAL

    004                     P             CAIXA    -89,20
    004                     R             CAIXA   98,66

    Se possível preciso assim, fazer o resultado do P + R e aparecer assim

    CODBANCO       BANCO       VALMOVATUAL

    004                 CAIXA             9,46



    terça-feira, 29 de outubro de 2019 18:09
  • Deleted
    • Marcado como Resposta IgorFKModerator terça-feira, 29 de outubro de 2019 18:35
    terça-feira, 29 de outubro de 2019 18:18
  • Cara deu exatamente o que queria..  Muito obrigado.

    terça-feira, 29 de outubro de 2019 18:29