Somando com SQL
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
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
Curtidas 0
Respostas
Marcos Saffran
27/12/2013
Boa tarde, para somar os valores de uma mesma linha usando sql, use:
select *, (valor1 + valor2 + ...) as soma from tabela;
select *, (valor1 + valor2 + ...) as soma from tabela;
GOSTEI 0
Eduardo Mendonça
27/12/2013
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)
GOSTEI 0
Marcos Saffran
27/12/2013
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'.
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)
GOSTEI 0
Eduardo Mendonça
27/12/2013
Aparece esse erro
sera que tem jeito para isso?
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?
GOSTEI 0
Marcos Saffran
27/12/2013
Pode ser a versão do MYSQL, qual é a versão que você utiliza?
Eu testei com a 5.6
Eu testei com a 5.6
GOSTEI 0
Eduardo Mendonça
27/12/2013
Eu usu SQL Manager for InterBase & Firebird\IBManager 2008
não sei dizer a ver. do SQL
não sei dizer a ver. do SQL
GOSTEI 0
Marcos Saffran
27/12/2013
Bem aí eu não sei,
tente a alteração abaixo:
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.
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.
GOSTEI 0