Usuário com melhor resposta
Operação entre Colunas com Resultados

Pergunta
-
Saudações,
Estou com uma duvida sobre como realizar a soma entre os resultados de duas colunas que foram renomeadas com o As.
A situação é a seguinte: Possuo um relatório onde devo apresentar uma coluna com as entradas, outra coluna com as saídas e uma terceira coluna com o Saldo (Entradas - Saídas). As colunas de entrada e saídas são Selects, preciso pegar o resultado destas colunas e fazer subtrair as saídas da entrada.
Abaixo está o código que estou utilizando, se testa-lo com o Access funciona, mas com o SQL Server retorna que a coluna Entrada é inválida, já que não existe esta coluna na tabela, ela é o Resultado de um select.
SELECT COD_CONTAMOV, DESC_CONTAMOV, CONTA_CAIXA, (Select Sum(MF.VALOR_MOVFIN) From MOVFIN MF Inner Join PLANO_CONTAS PC on MF.COD_PLACON = PC.COD_PLACON Where CONTAMOV.COD_CONTAMOV = MF.COD_CONTAMOV and MF.DATA_MOVFIN <= :DATA_MOVFINS And MF.COD_CCUSTO LIKE :COD_CCUSTOS And PC.ENTRADA_SAIDA = 'S') AS SAIDA, (Select Sum(MF.VALOR_MOVFIN) From MOVFIN MF Inner Join PLANO_CONTAS PC on MF.COD_PLACON = PC.COD_PLACON Where CONTAMOV.COD_CONTAMOV = MF.COD_CONTAMOV and MF.DATA_MOVFIN <= :DATA_MOVFINE And MF.COD_CCUSTO LIKE :COD_CCUSTOE And PC.ENTRADA_SAIDA = 'E') AS ENTRADA, ENTRADA - SAIDA AS SALDOFINAL FROM CONTAMOV WHERE CONTAMOV.STATUS_CONTAMOV = 'A' ORDER BY CONTA_CAIXA DESC, DESC_CONTAMOV;
Agradeço antecipadamente pela ajuda.
Deus continue a nos abençoar!
Respostas
-
Boa tarde,
Christiano, acredito que você também consiga obter o resultado desejado com a query abaixo:
SELECT c.COD_CONTAMOV, c.DESC_CONTAMOV, c.CONTA_CAIXA, Sum(CASE WHEN PC.ENTRADA_SAIDA = 'S' THEN MF.VALOR_MOVFIN ELSE 0 END) AS SAIDA, Sum(CASE WHEN PC.ENTRADA_SAIDA = 'E' THEN MF.VALOR_MOVFIN ELSE 0 END) AS ENTRADA, Sum(MF.VALOR_MOVFIN * CASE WHEN PC.ENTRADA_SAIDA = 'E' THEN 1 ELSE -1 END) AS SALDOFINAL FROM CONTAMOV as c INNER JOIN MOVFIN MF ON MF.COD_CONTAMOV = c.COD_CONTAMOV and MF.DATA_MOVFIN <= :DATA_MOVFINE And MF.COD_CCUSTO LIKE :COD_CCUSTOE INNER JOIN PLANO_CONTAS PC ON PC.COD_PLACON = MF.COD_PLACON WHERE c.STATUS_CONTAMOV = 'A' GROUP BY c.COD_CONTAMOV, c.DESC_CONTAMOV, c.CONTA_CAIXA ORDER BY c.CONTA_CAIXA DESC, c.DESC_CONTAMOV;
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Christiano R. Soares sexta-feira, 17 de outubro de 2014 14:07
Todas as Respostas
-
Tente algo assim:
SELECT COD_CONTAMOV, DESC_CONTAMOV, CONTA_CAIXA, Total = (ENTRADA - SAIDA) FROM( SELECT COD_CONTAMOV , DESC_CONTAMOV , CONTA_CAIXA, (SELECT SUM(MF.VALOR_MOVFIN) FROM MOVFIN MF INNER JOIN PLANO_CONTAS PC on MF.COD_PLACON = PC.COD_PLACON Where CONTAMOV.COD_CONTAMOV = MF.COD_CONTAMOV AND MF.DATA_MOVFIN <= :DATA_MOVFINS AND MF.COD_CCUSTO LIKE :COD_CCUSTOS AND PC.ENTRADA_SAIDA = 'S') AS SAIDA, (SELECT SUM(MF.VALOR_MOVFIN) FROM MOVFIN MF Inner Join PLANO_CONTAS PC on MF.COD_PLACON = PC.COD_PLACON Where CONTAMOV.COD_CONTAMOV = MF.COD_CONTAMOV AND MF.DATA_MOVFIN <= :DATA_MOVFINE AND MF.COD_CCUSTO LIKE :COD_CCUSTOE AND PC.ENTRADA_SAIDA = 'E') AS ENTRADA, ENTRADA - SAIDA AS SALDOFINAL FROM CONTAMOV WHERE CONTAMOV.STATUS_CONTAMOV = 'A' ORDER BY CONTA_CAIXA DESC, DESC_CONTAMOV )
- Editado Luan Bon quinta-feira, 16 de outubro de 2014 16:53
- Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 16 de outubro de 2014 18:50
-
Boa tarde,
Christiano, acredito que você também consiga obter o resultado desejado com a query abaixo:
SELECT c.COD_CONTAMOV, c.DESC_CONTAMOV, c.CONTA_CAIXA, Sum(CASE WHEN PC.ENTRADA_SAIDA = 'S' THEN MF.VALOR_MOVFIN ELSE 0 END) AS SAIDA, Sum(CASE WHEN PC.ENTRADA_SAIDA = 'E' THEN MF.VALOR_MOVFIN ELSE 0 END) AS ENTRADA, Sum(MF.VALOR_MOVFIN * CASE WHEN PC.ENTRADA_SAIDA = 'E' THEN 1 ELSE -1 END) AS SALDOFINAL FROM CONTAMOV as c INNER JOIN MOVFIN MF ON MF.COD_CONTAMOV = c.COD_CONTAMOV and MF.DATA_MOVFIN <= :DATA_MOVFINE And MF.COD_CCUSTO LIKE :COD_CCUSTOE INNER JOIN PLANO_CONTAS PC ON PC.COD_PLACON = MF.COD_PLACON WHERE c.STATUS_CONTAMOV = 'A' GROUP BY c.COD_CONTAMOV, c.DESC_CONTAMOV, c.CONTA_CAIXA ORDER BY c.CONTA_CAIXA DESC, c.DESC_CONTAMOV;
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Christiano R. Soares sexta-feira, 17 de outubro de 2014 14:07
-
Olá Christiano,
Verifica se atende
SELECT CM.COD_CONTAMOV, CM.DESC_CONTAMOV, CM.CONTA_CAIXA, Sum(MF.VALOR_MOVFIN) AS SAIDA, Sum(MF.VALOR_MOVFIN) AS ENTRADA, Sum(MF.VALOR_MOVFIN) - Sum(MF.VALOR_MOVFIN) AS SALDO FROM CONTAMOV CM, MOVFIN MFS, MOVFIN MFE, PLANO_CONTAS PC WHERE MFS.COD_CONTAMOV = CM.COD_CONTAMOV and MFS.DATA_MOVFIN <= :DATA_MOVFINS And MFS.COD_CCUSTO LIKE :COD_CCUSTOS And (PC.ENTRADA_SAIDA = 'S' OR PC.ENTRADA_SAIDA = 'E') AND MFE.COD_CONTAMOV = CM.COD_CONTAMOV and MFE.DATA_MOVFIN <= :DATA_MOVFINE And MFE.COD_CCUSTO LIKE :COD_CCUSTOE
Qualquer dúvida estou à disposição
Klayton Gomes MCP /MCTS/ MCPD Analist System / Software Developer
- Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 16 de outubro de 2014 18:51
-