SOMAR DADOS DE UMA TABELA COM OUTRA EM SQL

JUNIORARI 10/09/2009 18:22:47
#322541
Bom gale,a tudo bem.

Gostaria da ajuda de voces.

Tenho num Banco Access (isso mesmo, Access.. o projeto é pequeno..rsrs) duas tabelas assim:

Caixa -> DataCaixa, CodVenda, SubTotal, TaxaEntrega, Total
Despesas -> DataDesp, Descricao, Valor

Quero mostrar em Relatorio DataReport em que pegue a soma de SUM(Caixa.Tota)l e diminua o valor com a soma de SUM(Despesas.Valor) e nao estou conseguindo....

eu fiz assim:

sSQL = [Ô]SELECT C.DataCaixa, C.CodVenda, C.SubTotal, C.TaxaEntrega, C.Total, SUM(C.SubTotal) AS SomaSubTotal, SUM(C.TaxaEntrega) AS SomaTaxaEntrega, SUM(C.Total) AS SomaTotal, D.DataDesp, SUM(D.Valor) AS SomaValorDesp, (SomaTotal - SomaValorDesp) AS ValorCaixa FROM ( Caixa C INNER JOIN Despesas D ON C.DataCaixa = D.DataDesp ) WHERE Data = #[Ô] & dData & [Ô]#[Ô]

mas não deu certo...

alguem pode me dar uma luz.... ;-D

Agradeço.....


STRANDOW 10/09/2009 19:29:33
#322549
Resposta escolhida
[ô]Ola, JUNIORARI, segundo o que entendi é que vc quer o valor total do caixa - o valor total da despesa certo...vc pode fazer assim..

[ô]Isto aqui lhe retorna o valor exato do que vc quer, neste caso aqui vc tem

[ô]1- Um select que te da a soma dos valores entre CAIXA e DESPESA
sSQL = [Ô]SELECT[Ô]
sSQL = sSQL & [Ô] SUM(TOTALX) AS TOTALZ[Ô]
sSQL = sSQL & [Ô] FROM ([Ô]


[ô]2- aqui vc tem a query de soma do caixa
sSQL = sSQL & [Ô] SELECT[Ô]
sSQL = sSQL & [Ô] SUM(TOTAL) AS TOTALX
sSQL = sSQL & [Ô] FROM
sSQL = sSQL & [Ô] CAIXA
sSQL = sSQL & [Ô] WHERE
sSQL = sSQL & [Ô] Data = #[Ô] & dData & [Ô]#[Ô]

[ô]3- a União do select
sSQL = sSQL & [Ô] UNION

[ô]4 - aqui vc tem a query de soma da despesa
sSQL = sSQL & [Ô] SELECT[Ô]
sSQL = sSQL & [Ô] SUM(VALOR) *-1 AS TOTALX
sSQL = sSQL & [Ô] FROM
sSQL = sSQL & [Ô] DESPESAS
sSQL = sSQL & [Ô] WHERE
sSQL = sSQL & [Ô] DataDesp = #[Ô] & dData & [Ô]#[Ô]

[ô]5- aqui finaliza o primeiro select
sSQL = sSQL & [Ô] ) test
sSQL = sSQL & [Ô]


Qualquer duvida, pode dar um toque...

Pois que dá certo assim pq eu uso em controle de estoque de mercadoria....
JUNIORARI 10/09/2009 20:40:52
#322556
é isso mesmo, Strandow.. valeu

mas dessa forma está me retornando somente o campo TOTALZ, que é exatamente o saldo do caixa, mas eu queria tambquem que me retornasse a soma dos campos SubTotal, TaxaEntrega e Total, para puder colocar no DataReport, senão ele não aceita....

pesquisando mais na net consgui fazer essa consulta:

sSQL = [Ô]SELECT SUM(C.SubTotal) AS SomaSubTotal, SUM(D.Valor) AS SomaDespesas, (SomaSubTotal - [txt-color=#df0101]SUM(D.Valor)[/txt-color]) AS ValorCaixa, [Ô] & _
[Ô]SUM(C.TaxaEntrega) AS SomaTaxaEntrega FROM ( Caixa AS C LEFT OUTER JOIN Despesas AS D ON C.DataCaixa [Ô] & _
[Ô]= D.DataDesp ) WHERE C.DataCaixa = #[Ô] & dData, & [Ô]# GROUP BY C.DataCaixa [Ô]

Só que dessa forma, se , por exemplo, nao tiver nenhuma despesa no dia, a consulta me retorna como um valor nulo, e não é assim que quero...

Mas vou tentar implementar mais esse seu exemplo... talvez dê certo aki.... valew mesmo....
JUNIORARI 10/09/2009 22:35:39
#322565
pois é gente... naum deu... da forma que eu tentei varias formas e nao consegui.
o problema é que quando nao tiver dados que atendam o criterio na tabela despesas, a soma vai dar como nula.

Por exemplo, no dia 09/09 deu uma soma de 500,00, porem nenhuma despesa, na sql quando fizer SUM(D.Valor) vai ocorrei um valor nulo, e vai anular tambem essa soma.

entao eu entro em mais uma questao... quando encontrar valores nulos, deve ser colocado um 0,00 no campo.

pesquisando eu encontrei essa query: [txt-color=#ff0000]ISNULL(SUM(Valor),0)[/txt-color]
mas quando rodo, dá erro no VB justamente nessa consulta....

pois é, gente... alguem dá uma ajudinha ae....
STRANDOW 11/09/2009 04:44:49
#322578
Fala ae meu caro....
Simples, da forma que eu te passei, se pode usar o resultado do que queria e incrementar....ex...

Vamos pegar a Query e incrementar..ok



sSQL = [Ô]SELECT[Ô]
sSQL = sSQL & [Ô] SUM(C.SubTotal) AS SomaSubTotal,[Ô]
sSQL = sSQL & [Ô] SUM(C.TaxaEntrega) AS SomaTaxaEntrega,
sSQL = sSQL & [Ô] SUM(TOTALX) AS ValorCaixa[Ô]
sSQL = sSQL & [Ô] FROM ([Ô]

sSQL = sSQL & [Ô] SELECT[Ô]
sSQL = sSQL & [Ô] SUM(TOTAL) AS TOTALX
sSQL = sSQL & [Ô] FROM
sSQL = sSQL & [Ô] CAIXA
sSQL = sSQL & [Ô] WHERE
sSQL = sSQL & [Ô] Data = #[Ô] & dData & [Ô]#[Ô]

sSQL = sSQL & [Ô] UNION

sSQL = sSQL & [Ô] SELECT[Ô]
sSQL = sSQL & [Ô] SUM(VALOR) *-1 AS TOTALX
sSQL = sSQL & [Ô] FROM
sSQL = sSQL & [Ô] DESPESAS
sSQL = sSQL & [Ô] WHERE
sSQL = sSQL & [Ô] DataDesp = #[Ô] & dData & [Ô]#[Ô]

sSQL = sSQL & [Ô] ) test,[Ô]

[ô]A unica coisa que difere é aqui, vc pode relacionar os dados que demos desta forma...ok
sSQL = sSQL & [Ô] CAIXA
sSQL = sSQL & [Ô] WHERE
sSQL = sSQL & [Ô] Data = #[Ô] & dData & [Ô]#[Ô]
JUNIORARI 11/09/2009 11:29:50
#322602

Cara, agradeco mesmo ai a ajuda, de coracao.... [S98]

só não entendi porque esse: sSQL = sSQL & [Ô] )[txt-color=#ff0000] test[/txt-color],[Ô]

mas entao, eu tirei ele e deu certo... porem quero que me retorne tambem o valor da soma das despesas...

no seu exemplo não tá retornando... eu não sou muito bom em SQL avançada assim como você... [S70]
mas eu tentei colocar SUM(Despesas.Valor) AS SomaDespesas, e tá me retornando o erro de : Parametros insuficientes. Eram esperados 1.

Tentei ver se o valor estava na variavel TOTALX, mas no resultado da consulta o TOTALX não aparece....

me ajuda ae.....
STRANDOW 11/09/2009 13:31:48
#322616
KKKK
bem, quando se usa aplica access, vc pode criar unions em query, finalizar com [Ô])[Ô] e pronto, porem, vc pode fazer uma aplicação que possa tanto trabalhar com access como em sql tb....porem, pra sql, vc tem de por um alias pra identificar a query se não o sql te retorna erro, mas vc pode usa a mesma query no access que não da problema nenhum.

é como te falei anteriormente, seguindo este conceito, vc pode fazer mile uma coisa....
tipo...da forma que está...vamos pegar o total de despesa e o total do caixa....ok...entao ficaria assim...



sSQL = [Ô]SELECT[Ô]
sSQL = sSQL & [Ô] SUM(C.SubTotal) AS SomaSubTotal,[Ô]
sSQL = sSQL & [Ô] SUM(C.TaxaEntrega) AS SomaTaxaEntrega,[Ô]
sSQL = sSQL & [Ô] SUM(TOTALX) AS ValorCaixa,[Ô]
sSQL = sSQL & [Ô] SUM(CAIXA) AS CAIXAX,[Ô],
sSQL = sSQL & [Ô] SUM(DESPESA) AS DESPESAX,[Ô]
sSQL = sSQL & [Ô] FROM ([Ô]

sSQL = sSQL & [Ô] SELECT[Ô]
sSQL = sSQL & [Ô] SUM(TOTAL) AS TOTALX,[Ô]
sSQL = sSQL & [Ô] SUM(TOTAL) AS CAIXA,[Ô]
sSQL = sSQL & [Ô] 0 AS DESPESA[Ô]
sSQL = sSQL & [Ô] FROM[Ô]
sSQL = sSQL & [Ô] CAIXA[Ô]
sSQL = sSQL & [Ô] WHERE[Ô]
sSQL = sSQL & [Ô] Data = #[Ô] & dData & [Ô]#[Ô]

sSQL = sSQL & [Ô] UNION[Ô]

sSQL = sSQL & [Ô] SELECT[Ô]
sSQL = sSQL & [Ô] SUM(VALOR) *-1 AS TOTALX,[Ô]
sSQL = sSQL & [Ô] 0 AS CAIXA,[Ô]
sSQL = sSQL & [Ô] SUM(VALOR) AS DESPESA[Ô]
sSQL = sSQL & [Ô] FROM[Ô]
sSQL = sSQL & [Ô] DESPESAS[Ô]
sSQL = sSQL & [Ô] WHERE[Ô]
sSQL = sSQL & [Ô] DataDesp = #[Ô] & dData & [Ô]#[Ô]

sSQL = sSQL & [Ô] ) test,[Ô]

[ô]A unica coisa que difere é aqui, vc pode relacionar os dados que demos desta forma...ok
sSQL = sSQL & [Ô] CAIXA
sSQL = sSQL & [Ô] WHERE
sSQL = sSQL & [Ô] Data = #[Ô] & dData & [Ô]#[Ô]



Só isto ja da pra matar o problema teu....
Agora...não vá só copiar e colar em teu projeto, de uma estuda nisto pra vc comprender a beleza que é trabalhar com unions.
Se vc pegar a idéia de como funciona, nossa, sua mente se abrirá pra N possibilidades em se tratando de query's.
Boa sorte ai e precisando...da um tok ae...ok
JUNIORARI 11/09/2009 14:56:57
#322640
cara, agora complicou mais..... hehe[S55]

tentei analisar essa sql, mas nao entendi pq vc colocou 0 AS DESPESA e nem aquele 0 AS CAIXA....[S35]
acho que ainda não cheguei nessa parte dos meus estudos...[S92]

executei e deu esse erro: A instrução SELECT inclui uma palavra reservada ou um nome de arqumento que está incorreto ou faltando....

e eu que pensei que seria uma coisa bem facinha... tipo assim:

[Ô]pega a soma do campo SubTotal da Tabela Caixa, a soma do campo TaxaEntrega da Tabela Caixa, soma esses resultados e subtrai esse valor com a soma do campo Valor da Tabela Despesas, onde a data é ????? [Ô] e me de o resultado como SaldoCaixa
ou seja: SaldoCaixa = ( (SomaSubTotalCaixa + SomaTaxaEntregaCaixa) - (SomaValorDespesas) )

só isso.....[S85]
STRANDOW 12/09/2009 06:23:29
#322685
e ai meu caro, tudo bem, tem como vc postar so estas duas tabelas num arquivo access, dai eu te explico melhor esta consulta...ok
JUNIORARI 12/09/2009 17:58:57
#322715
pow cara.. tai o banco com as tabelas

te agradeceria muito se vc visse e me explicasse como fazer essa consulta

ou entao vê se tá legal a estrutura do banco e dê sua opiniao se possivel dando uma arrumada na estrutura dele, se voce achar que deve melhorar....
STRANDOW 14/09/2009 05:39:47
#322796
ola meu caro....tudo bem...
veja seu aquirvo abaixo, esta salva a consulta nela, entra em modo de exibição em SQL e veja como está.
detalhe, um dos problemas que teve, é erro de digitação, pois vc postou a pesquisa em campo data com o nome do campo da tabela sendo data, e na verdade é datacaixa....fica esperto..rsrs.

Bem, um conselho, sempre que for fazer uma query, testa antes na tela da base de dados, no seu caso aqui, na consulta do access...ok, pos se der algum problema, o proprio acces te auxilia por onde o erro pode estar...

Espero ter ajudado...mas lembrando....estude esta possibilidade de montar query com Unions, pois é uma coisa linda....ao se ter noção disto, você cerá quantas possibilidades poderá montar.
A consulta esta abaixo, mas caso queira, pode usar o arquivo que ta anexo, lá tem a consulta salva com o nome cns_Valores.

Pra quem ficou interessado tb, aqui esta a query usada..:

ssql = [Ô]SELECT[Ô]
ssql = ssql & [Ô] SUM(SubTotal) AS SomaSubTotal,[Ô]
ssql = ssql & [Ô] SUM(TaxaEntrega) AS SomaTaxaEntrega,[Ô]
ssql = ssql & [Ô] SUM(TOTALX) AS ValorCaixa,[Ô]
ssql = ssql & [Ô] SUM(CAIXA) AS CAIXAX,[Ô]
ssql = ssql & [Ô] SUM(DESPESA) AS DESPESAX[Ô]
ssql = ssql & [Ô] FROM ([Ô]

ssql = ssql & [Ô] SELECT[Ô]
ssql = ssql & [Ô] SUM(TOTAL) AS TOTALX,[Ô]
ssql = ssql & [Ô] SUM(TOTAL) AS CAIXA,[Ô]
ssql = ssql & [Ô] 0 AS DESPESA[Ô]
ssql = ssql & [Ô] FROM[Ô]
ssql = ssql & [Ô] CAIXA[Ô]
ssql = ssql & [Ô] WHERE[Ô]
ssql = ssql & [Ô] Datacaixa = cvdate([ô][Ô] & data & [Ô][ô])[Ô]

ssql = ssql & [Ô] UNION[Ô]

ssql = ssql & [Ô] SELECT[Ô]
ssql = ssql & [Ô] SUM(VALOR) *-1 AS TOTALX,[Ô]
ssql = ssql & [Ô] 0 AS CAIXA,[Ô]
ssql = ssql & [Ô] SUM(VALOR) AS DESPESA[Ô]
ssql = ssql & [Ô] FROM[Ô]
ssql = ssql & [Ô] DESPESAS[Ô]
ssql = ssql & [Ô] WHERE[Ô]
ssql = ssql & [Ô] DataDesp = cvdate([ô][Ô] & data & [Ô][ô])[Ô]

ssql = ssql & [Ô] ) test,[Ô]


ssql = ssql & [Ô] CAIXA[Ô]
ssql = ssql & [Ô] WHERE[Ô]
ssql = ssql & [Ô] Datacaixa = cvdate([ô][Ô] & data & [Ô][ô])[Ô]
Página 1 de 2 [12 registro(s)]
Tópico encerrado , respostas não são mais permitidas