none
Subtração no SQL SERVER RRS feed

  • Pergunta

  • Tenho uma tabela CAIXA e o campo VALOR e o campo TIPO. No campo valor é lançado o valor e no tipo se o valor lançado é débito ou crédito.

    Eu quero encontrar o valor que o cliente deve:

    VALOR DEVIDO = (SOMA DE TODOS OS DÉBITOS) - (SOMA DE TODOS OS CRÉDITO)

    tipo: (sum(CampoVALOR) quando o CampoTipo for Crédito) - (sum(CampoVALOR) quando o CampoTipo for Débito)

    Alguém poderia me dar ajudar

    sexta-feira, 27 de março de 2020 19:14

Respostas

Todas as Respostas

  • Boa tarde,

    Eduardo, segue uma sugestão para testes:

    sum(Valor * case when Tipo = 'Débito' then 1 else -1 end) as Soma

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Eduardo Michetti sexta-feira, 27 de março de 2020 21:12
    sexta-feira, 27 de março de 2020 19:47
  • Não da certo pq eu tenho q subtrair o valor do mesmo campo. O campo valor é um só, então vou ter q subtrair a soma de todos valores quando o tipo for DEBITO da soma de todos valores quando é CREDITO.

    sexta-feira, 27 de março de 2020 20:18
  • Se tiver como eu fazer uma subtração do resultado do case com o resultado de outro case deve dar certo
    sexta-feira, 27 de março de 2020 20:29
  • Eduardo, não entendi corretamente o seu post inicial por isso na minha sugestão anterior a soma dos créditos está sendo subtraída da soma dos débitos. Para ficar conforme você disse no seu último post experimente dessa forma:

    sum(Valor * case when Tipo = 'DEBITO' then -1 else 1 end) as Soma

    Nesse código está sendo utilizado o comando Case para verificar o conteúdo da coluna Tipo. Quando a coluna Tipo é igual a 'DEBITO' o valor é multiplicado por -1, fica negativo e no final temos a soma de um valor negativo. ou seja, uma subtração.

    Espero que ajude

     

    Assinatura: http://www.imoveisemexposicao.com.br


    • Editado gapimex sexta-feira, 27 de março de 2020 20:40
    sexta-feira, 27 de março de 2020 20:39
  • q raciocínio simples e eficiente rsrs, estou fazendo testes aqui mas acho q vai dar certo. Se eu postar outra coisa aqui vc é notificado?
    sexta-feira, 27 de março de 2020 21:01
  • Muito show, vc não tem ideia o tanto q me ajudou. Código tinha outras variações, ficou assim:

    sum(CxMovValor * case	
    	when ((CxMovHistorico<>'VALOR TRANSPORTADO')AND(CxMovTipoLanc = 'CREDITO')AND(CxMovFormaPG='DINHEIRO')) then 1
    	when ((CxMovTipoLanc = 'DEBITO')AND(CxMovFormaPG='DINHEIRO')) then -1 end)

    sexta-feira, 27 de março de 2020 21:12