QUERY SUM()

MOREIRA 03/03/2015 15:50:27
#444906
o que há de errado, não funciona. aqui.. banco de dados mysql



            Set Rst = New ADODB.Recordset
Sql = [Ô]Select (Select SUM(ds_valorentrada) from tb_fluxocaixa_diversos where (ds_statusoperacao = [ô]E[ô]) - SELECT SUM(ds_valorentrada) from tb_fluxocaixa_diversos WHERE (ds_statusoperacao = [ô]S[ô])) As Saldo_Caixa[Ô]
Rst.Open Sql, Conexao, 3
If Rst!Saldo_Caixa > 0 Then
lblvalortotal_saldo.Caption = Format(Rst!Saldo_Caixa, [Ô]###,##0.00[Ô])
End If

NILSONTRES 03/03/2015 15:58:00
#444908
Qual retorno vc tem ?
E o Agrupamento(Group By), não precisa ?
MOREIRA 03/03/2015 16:02:44
#444909
ERRO DE sintaxe

da clausula where pra frente...
where (ds_statusoperacao = [ô]E[ô]) - SELECT SUM(ds_valorentrada) from tb_fluxocaixa_diversos WHERE (ds_statusoperacao = [ô]S[ô])) As Saldo_Caixa[Ô]


MOREIRA 03/03/2015 17:05:36
#444911
alguma sugestão...? já testei diretamente no banco mas dá erro de sintaxe
CHDSSANTOS 03/03/2015 20:44:35
#444913
Moreira, boa noite!

Tente realizar os Selects individualmente, colocando os resultados em duas variáveis, depois uma simples operação matemática deve resolver.
Outra alternativa é utilizar o GROUP BY do campo [Ô]ds_statusoperacao[Ô] acrescentando o retorno em no select. Mais ou menos assim:

[Ô]SELECT ds_statusoperacao, SUM(ds_valorentrada) FROM tb_fluxocaixa_diversos WHERE ds_statusoperacao IN ([ô]E[ô],[ô]S[ô]) GROUP BY ds_statusoperacao[Ô]

A unica diferença é que a forma de ler o resultado teria que mudar, pois o resultado da query é apresentado em duas colunas e duas linhas, no caso do campo ds_statusoperacao conter as duas letras [ô]E[ô] e [ô]S[ô].
FILMAN 03/03/2015 21:27:00
#444914
Tente assim:

SELECT 
s.Entrada, s.Saida, (s.Entrada - s.Saida) As SaldoCaixa
FROM (
SELECT
Sum(CASE WHEN ds_statusoperacao = [ô]E[ô] THEN ds_valorentrada ELSE 0 END) AS Entrada,
Sum(CASE WHEN ds_statusoperacao = [ô]S[ô] THEN ds_valorentrada ELSE 0 END) AS Saida
FROM tb_fluxocaixa_diversos
WHERE ds_statusoperacao in ([ô]E[ô],[ô]S[ô])
) s
MARCELO.TREZE 03/03/2015 21:52:36
#444916
eu sempre chato insistindo nas triggers, veja uma simples que funciona super bem, ou seja apos um simples insert se for E ou S ela abate ou acrescenta no saldo.

CREATE DEFINER='root'@'%' TRIGGER 'movimentos_before_insert' BEFORE INSERT ON 'movimentos' FOR EACH ROW BEGIN
DECLARE saldoAnterior double;
SET saldoAnterior = (SELECT M.saldo FROM movimentos M ORDER BY M.id DESC LIMIT 1);
IF (new.tipo= [ô]E[ô]) THEN
SET new.saldo = saldoAnterior + new.valor;
end if;
if (new.tipo=[ô]S[ô]) then
SET new.saldo = saldoAnterior - new.valor;
END IF;
END


posta a estrutura atual da sua tabela
OMAR2011 03/03/2015 22:33:26
#444918
Vou dar meu pitaco também, sendo mais simples.
Sql = [Ô] SELECT (SELECT SUM(ds_valorentrada) FROM tb_fluxocaixa_diversos WHERE ds_statusoperacao = [ô]E[ô] )as Tot , (SELECT SUM(ds_valorentrada) FROM tb_fluxocaixa_diversos WHERE ds_statusoperacao = [ô]S[ô] ) AS Saldo_Caixa FROM tb_fluxocaixa_diversos [Ô]
SINCLAIR 04/03/2015 09:20:24
#444936
Colega,

Aqui testei e funcionou ótimo.

[txt-color=#0000f0]Select
Entradas.TotalEntrada, Saidas.TotalSaida, Saidas.Totalsaida - Entradas.TotalEntrada as TotalMovimentado
from
(Select SUM(ds_valorentrada) as TotalEntrada from tb_fluxocaixa_diversos where (ds_statusoperacao = [ô]E[ô])) as Entradas,
(Select SUM(ds_valorentrada) as TotalSaida from tb_fluxocaixa_diversos where (ds_statusoperacao = [ô]S[ô])) as Saidas
[/txt-color]


A query acima te informa

  • Total de Entradas
  • Total de Saídas
  • Total de Saídas - Entradas

    Tudo de bom.
  • Tópico encerrado , respostas não são mais permitidas