Fórum Somando com SQL #465122

27/12/2013

0

tenho uma Consulta na minha aplicação Delphi que precisa somar via SQL algus campos da mesma linha tipo na linha
1 Código Valor1 data1 valor2 data2 valor3 data3 ...
1 99,00 01/01/13 95,00 01/02/13 90,01 01/03/13 ...

preciso soma essas colunas no sql como posso fazer isso
Eduardo Mendonça

Eduardo Mendonça

Responder

Posts

28/12/2013

Marcos Saffran

Boa tarde, para somar os valores de uma mesma linha usando sql, use:

select *, (valor1 + valor2 + ...) as soma from tabela;
Responder

Gostei + 0

28/12/2013

Eduardo Mendonça

Então ficaria assim ?
SELECT
    (((T1.VALOR_VENCIMENTO1 + T1.VALOR_JUROS1) - T1.VALOR_DESCONTO1) + ((T1.VALOR_VENCIMENTO2 + T1.VALOR_JUROS2) - T1.VALOR_DESCONTO2) + ((T1.VALOR_VENCIMENTO3 + T1.VALOR_JUROS3) - T1.VALOR_DESCONTO3) + ((T1.VALOR_VENCIMENTO4 + T1.VALOR_JUROS4) - T1.VALOR_DESCONTO4) + ((T1.VALOR_VENCIMENTO5 + T1.VALOR_JUROS5) - T1.VALOR_DESCONTO5) + ((T1.VALOR_VENCIMENTO6 + T1.VALOR_JUROS6) - T1.VALOR_DESCONTO6) +((T1.VALOR_VENCIMENTO7 + T1.VALOR_JUROS7) - T1.VALOR_DESCONTO7) + ((T1.VALOR_VENCIMENTO8 + T1.VALOR_JUROS8) - T1.VALOR_DESCONTO8) + ((T1.VALOR_VENCIMENTO9 + T1.VALOR_JUROS9) - T1.VALOR_DESCONTO9) + ((T1.VALOR_VENCIMENTO10 + T1.VALOR_JUROS10) - T1.VALOR_DESCONTO10) + ((T1.VALOR_VENCIMENTO11 + T1.VALOR_JUROS11) - T1.VALOR_DESCONTO11) + ((T1.VALOR_VENCIMENTO12 + T1.VALOR_JUROS12) - T1.VALOR_DESCONTO12))As SOMA,
    T1.CODIGO_MOVIMENTACAO,
    T1.VALOR_NOTA, 
    T1.DATA_EMISSAO,
    T1.VALOR_VENCIMENTO1,
    T1.DATA_VENCIMENTO1,
    T1.VALOR_PAGAMENTO1,
    T1.DATA_PAGAMENTO1,
    T1.VALOR_JUROS1,
    T1.VALOR_DESCONTO1,
    T2.NOME_FORNECEDOR
FROM
	CONTAS_PAGAR T1,
    FORNECEDORES T2
WHERE 
	T1.FORNECEDOR = T2.NOME_FORNECEDOR
AND
(SOMA>0 AND SOMA<T1.VALOR_NOTA)  
Responder

Gostei + 0

28/12/2013

Marcos Saffran

Tente com a alteração que fiz no final
os 'alias' não funcionam na clausula 'where', apenas em 'group by', 'order by' e 'having'.

Então ficaria assim ?
SELECT
    (((T1.VALOR_VENCIMENTO1 + T1.VALOR_JUROS1) - T1.VALOR_DESCONTO1) + ((T1.VALOR_VENCIMENTO2 + T1.VALOR_JUROS2) - T1.VALOR_DESCONTO2) + ((T1.VALOR_VENCIMENTO3 + T1.VALOR_JUROS3) - T1.VALOR_DESCONTO3) + ((T1.VALOR_VENCIMENTO4 + T1.VALOR_JUROS4) - T1.VALOR_DESCONTO4) + ((T1.VALOR_VENCIMENTO5 + T1.VALOR_JUROS5) - T1.VALOR_DESCONTO5) + ((T1.VALOR_VENCIMENTO6 + T1.VALOR_JUROS6) - T1.VALOR_DESCONTO6) +((T1.VALOR_VENCIMENTO7 + T1.VALOR_JUROS7) - T1.VALOR_DESCONTO7) + ((T1.VALOR_VENCIMENTO8 + T1.VALOR_JUROS8) - T1.VALOR_DESCONTO8) + ((T1.VALOR_VENCIMENTO9 + T1.VALOR_JUROS9) - T1.VALOR_DESCONTO9) + ((T1.VALOR_VENCIMENTO10 + T1.VALOR_JUROS10) - T1.VALOR_DESCONTO10) + ((T1.VALOR_VENCIMENTO11 + T1.VALOR_JUROS11) - T1.VALOR_DESCONTO11) + ((T1.VALOR_VENCIMENTO12 + T1.VALOR_JUROS12) - T1.VALOR_DESCONTO12))As SOMA,
    T1.CODIGO_MOVIMENTACAO,
    T1.VALOR_NOTA, 
    T1.DATA_EMISSAO,
    T1.VALOR_VENCIMENTO1,
    T1.DATA_VENCIMENTO1,
    T1.VALOR_PAGAMENTO1,
    T1.DATA_PAGAMENTO1,
    T1.VALOR_JUROS1,
    T1.VALOR_DESCONTO1,
    T2.NOME_FORNECEDOR
FROM
	CONTAS_PAGAR T1,
    FORNECEDORES T2
WHERE 
	T1.FORNECEDOR = T2.NOME_FORNECEDOR
HAVING
(SOMA>0 AND SOMA<=T1.VALOR_NOTA)  

Responder

Gostei + 0

30/12/2013

Eduardo Mendonça

Aparece esse erro

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).


sera que tem jeito para isso?
Responder

Gostei + 0

30/12/2013

Marcos Saffran

Pode ser a versão do MYSQL, qual é a versão que você utiliza?

Eu testei com a 5.6
Responder

Gostei + 0

30/12/2013

Eduardo Mendonça

Eu usu SQL Manager for InterBase & Firebird\IBManager 2008
não sei dizer a ver. do SQL
Responder

Gostei + 0

30/12/2013

Marcos Saffran

Bem aí eu não sei,
tente a alteração abaixo:
WHERE 
    T1.FORNECEDOR = T2.NOME_FORNECEDOR
GROUP BY
  T1.FORNECEDOR
HAVING
(SOMA>0 AND SOMA<=T1.VALOR_NOTA)


caso não funcione recomendo ir testando o comando por partes, de preferência em um editor de comandos, até identificar onde está o erro.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar