Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

FABIO SYS

Select sum em uma tabela com parametro em outra tabela

Recommended Posts

Olá Amigos Boa tarde.

 

 

 

Tenho uma Select sum que esta num dbgrid e soma os campos por exemplo Serviços e esta tabela têm um num de orçamento que eu gostaria que quando rodasse a select sum ela somasse apenas aquele num de orçamento por vez por exemplo:

 

 

Orçamento 1

 

 

 

Cliente João

 

 

produto valor

teste 1,00

teste2 1,00

 

 

Totall R$2,00

 

 

Ao invês de somar todos os clientes de uma vez apenas soma o que estou editando no momento.

 

Tentei fazer assim: mas diz que há um erro de sintaxe :

 

Detalhe: são duas tabelas neste caso

 

a orçamento que gera o "numorçamento"

e a serviços onde insiro os pedidos e soma

 

Select sum (total) as ValorTotal from OrcaAcab where 'CodigoOrçamento' = 'CodigoOrçamento' from orcamento;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não vai funcionar seu select assim. O where não aceita este tipo de condição.

 

Existem duas formas de se fazer, mas para o seu select o jeito mais simples é este:

 

SELECT SUM(CAMPO) AS TOTAL FROM SUA_TABELA WHERE CAMPO_DE_FILTRO = VALOR

Ex.: Select sum (total) as ValorTotal from OrcaAcab where CodigoOrcamento = 1

No exemplo, irá trazer a soma de todos os valores com o código de orçamento = 1

A outra forma seria com o uso de inner joins... contudo estou enferrujado na sintaxe do comando no Access, mas em sql server seria assim:

 

Select sum (A.total) as ValorTotal 
from OrcaAcab A with(nolock)
inner join orcamento B with(nolock) on (B.codigoorcamento = A.codigoorcamento)
where B.CodigoOrcamento = 1

O código acima faz o mesmo do primeiro select... a diferença é que ele só trará resultado se existir o código do orçamento nas duas tabelas.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não vai funcionar seu select assim. O where não aceita este tipo de condição.

 

Existem duas formas de se fazer, mas para o seu select o jeito mais simples é este:

 

SELECT SUM(CAMPO) AS TOTAL FROM SUA_TABELA WHERE CAMPO_DE_FILTRO = VALOR

Ex.: Select sum (total) as ValorTotal from OrcaAcab where CodigoOrcamento = 1

No exemplo, irá trazer a soma de todos os valores com o código de orçamento = 1

A outra forma seria com o uso de inner joins... contudo estou enferrujado na sintaxe do comando no Access, mas em sql server seria assim:

 

Select sum (A.total) as ValorTotal 
from OrcaAcab A with(nolock)
inner join orcamento B with(nolock) on (B.codigoorcamento = A.codigoorcamento)
where B.CodigoOrcamento = 1

O código acima faz o mesmo do primeiro select... a diferença é que ele só trará resultado se existir o código do orçamento nas duas tabelas.

 

[]'s

 

 

 

Olha estranho fiz como demosntrado no primeiro, e ele não apare ce mais o resultado no dbtext estou lendo aqui e pensei será que Group by não resolveira o meu caso pq veja:

 

 

Eu tenho duas tabelas por exemplo :

 

Vendas que puxa os dados de items

 

e

 

orçamento que puxa dados da cliente

 

 

Ai eu preciso que quando eu gere um novo orçameno por exemplo nº1 a select sum some apenas os items do orçamento 1 e não toda a tabela.SERÁ QUE ISTO?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você gravou o orçamento na OrcaAcab antes de dar o select pelo código do orçamento da tabela orcamento? Lembresse que se não existir nenhum orçamento gravado na OrcaAcab com o código que passou não irá retornar nada no select. E group by é só para agrupar informações, não é filtro de pesquisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz assim:

 

 

Select CodigoOrçamento, sum (total) as ValorTotal from OrcaAcab where CodigoOrçamento from OrcaServ;

 

 

Só que dá o seguinte erro:

 

 

 

"Erro de sintaxe operador faltando) na expressão de consulta codigoOrçamento from OrcaServ"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo... já disse no meu primeiro post deste tópico que este sql que você montou:

 

Select CodigoOrçamento, sum (total) as ValorTotal from OrcaAcab where CodigoOrçamento from OrcaServ;

NÃO FUNCIONA!

 

Desculpe-me, mas terei que repetir o que lhe falei outro dia: você precisa urgentemente estudar sobre comandos sqls porque o select acima é o mais básico do básico de qualquer apostila.

 

O que você deve fazer é o seguinte: pegar o código do orçamento gerado na tabela OrcaServ e passar para o sql na forma como escrevi no primeiro post, o qual copio abaixo novamente:

 

Select sum (total) as ValorTotal from OrcaAcab where CodigoOrcamento = 1

Onde você substituirá o 1 pelo código do orçamento que você gerou. Supondo que o código deste orçamento é 10, seria o sql então o seguinte:

 

Select sum (total) as ValorTotal from OrcaAcab where CodigoOrcamento = 10

Não há como ter dois from num mesmo select, a menos que se use subselects... o que complicaria ainda mais sua vida dada a dificuldade com os selects básicos que você já apresenta e que podemos detectar pelos seus posts.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo... já disse no meu primeiro post deste tópico que este sql que você montou:

 

Select CodigoOrçamento, sum (total) as ValorTotal from OrcaAcab where CodigoOrçamento from OrcaServ;

NÃO FUNCIONA!

 

Desculpe-me, mas terei que repetir o que lhe falei outro dia: você precisa urgentemente estudar sobre comandos sqls porque o select acima é o mais básico do básico de qualquer apostila.

 

O que você deve fazer é o seguinte: pegar o código do orçamento gerado na tabela OrcaServ e passar para o sql na forma como escrevi no primeiro post, o qual copio abaixo novamente:

 

Select sum (total) as ValorTotal from OrcaAcab where CodigoOrcamento = 1

Onde você substituirá o 1 pelo código do orçamento que você gerou. Supondo que o código deste orçamento é 10, seria o sql então o seguinte:

 

Select sum (total) as ValorTotal from OrcaAcab where CodigoOrcamento = 10

Não há como ter dois from num mesmo select, a menos que se use subselects... o que complicaria ainda mais sua vida dada a dificuldade com os selects básicos que você já apresenta e que podemos detectar pelos seus posts.

 

[]'s

 

 

Eu novamente...

 

 

 

Então pesquisei e pasme consegui! rsrs fiz assim

 

Select sum (total) as ValorTotal from OrcaAcab group by CodigoOrçamento;

 

 

Moral da história no dbgrid de cima aparece normal apenas os valores correspondentes ao cliente 1 por exemplo:

 

 

Quant Descrição valor

1 t este 0,50

 

dbtextquery1 total= R$:0,50

 

 

Isto no primero dbgrid: Ai, todo feliz com meus pequenos progressos em sql, repeti a mesma idéia logo abaixo no outro ADOquery2 referente ao outro dbgrid:

 

 

Select sum (ValorPapel) as geral from OrcaServ group by CodigoOrçamento;

 

 

E sabe o que aconteceu? O DBText muito embora ativado não mostra nada porque será?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Permita-me discordar... na realidade você não conseguiu filtrar sua consulta por um orçamento especifico, e sim agrupar os resultados pelo código do orçamento... experimente gravar outro orçamento e veja o que seu sql irá retornar.

 

Para filtrar e trazer apenas os dados referentes a um orçamento específico, é obrigatório o uso do where e a passagem do código do orçamento por parâmetro, como eu já citei antes.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Permita-me discordar... na realidade você não conseguiu filtrar sua consulta por um orçamento especifico, e sim agrupar os resultados pelo código do orçamento... experimente gravar outro orçamento e veja o que seu sql irá retornar.

 

Para filtrar e trazer apenas os dados referentes a um orçamento específico, é obrigatório o uso do where e a passagem do código do orçamento por parâmetro, como eu já citei antes.

 

[]'s

É realmente você está certo, (não que Eu tenha duvidado...) mas como estou estudando né, me dê um desconto rsrsr

Então mas quanto ao where a única coisa que Eu não entendi ainda é isto.

 

 

Eu colocando "where CodigoOrcamento =10" Eu terei que mudar o numero de orçamento ou será que quando eu clicar em novo orçamento o adoquery irá fazer com que este "where" entenda que onumero já é outro?

 

 

E pintou uma outra dúvida:

 

A questão da soma já entendi mas quando coloco um outro item ela não atualiza o dbtext fiz assim

 

Em events do dbgrid, fui em Oncelclick e coloquei:

 

datamodule1.adoserv.refresh;

 

 

Mas não acontece nada e nem quando eu saio do programa e abro ele novamente atualiza pq será?

 

 

PS: Desculpe a amolação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A questão do where é o seguinte: dinamicamente no seu programa você vai ter que passar o código do orçamento para a sql e ai sim dar o open na sua query, para que o filtro funcione. Ou seja, você antes de executar a sql tem que saber qual é o código do orçamento e passar isso para a clásula, trocando o valor 10 que coloquei no exemplo pelo seu código de orçamento que vai consultar.

 

O adoquery não entende nada, ele é burro por natureza... você que precisa passar para ele o que ele tem que fazer senão ele vai fazer errado mesmo rs.

 

Outra coisa... não coloque dentro do grid o código para atualizar o mesmo.... isso deixará lento o sistema se o usuário ficar clicando dentro do grid o tempo todo... o melhor seria que depois de salvar um produto no orçamento você fechasse a query ligada ao grid e refizesse a consulta mesmo. Geralmente eu prefiro usar o close e depois o open mesmo.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

A questão do where é o seguinte: dinamicamente no seu programa você vai ter que passar o código do orçamento para a sql e ai sim dar o open na sua query, para que o filtro funcione. Ou seja, você antes de executar a sql tem que saber qual é o código do orçamento e passar isso para a clásula, trocando o valor 10 que coloquei no exemplo pelo seu código de orçamento que vai consultar.

 

O adoquery não entende nada, ele é burro por natureza... você que precisa passar para ele o que ele tem que fazer senão ele vai fazer errado mesmo rs.

 

Outra coisa... não coloque dentro do grid o código para atualizar o mesmo.... isso deixará lento o sistema se o usuário ficar clicando dentro do grid o tempo todo... o melhor seria que depois de salvar um produto no orçamento você fechasse a query ligada ao grid e refizesse a consulta mesmo. Geralmente eu prefiro usar o close e depois o open mesmo.

 

[]'s

Por favor, como Eu faço para que a sql seja informada quanto ao número de orçamento pq o form "cadastro orçamento" esta disposto da seguinte maneira:

 

 

O cliente quando clica em novo orçamento dá um append em todos os campos ai ele vai selecionando os items ai no que ele salva, o campo "autoincremento" do campo "numorca" gera um número.Como informo isso para a sql?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A questão do where é o seguinte: dinamicamente no seu programa você vai ter que passar o código do orçamento para a sql e ai sim dar o open na sua query, para que o filtro funcione. Ou seja, você antes de executar a sql tem que saber qual é o código do orçamento e passar isso para a clásula, trocando o valor 10 que coloquei no exemplo pelo seu código de orçamento que vai consultar.

 

O adoquery não entende nada, ele é burro por natureza... você que precisa passar para ele o que ele tem que fazer senão ele vai fazer errado mesmo rs.

 

Outra coisa... não coloque dentro do grid o código para atualizar o mesmo.... isso deixará lento o sistema se o usuário ficar clicando dentro do grid o tempo todo... o melhor seria que depois de salvar um produto no orçamento você fechasse a query ligada ao grid e refizesse a consulta mesmo. Geralmente eu prefiro usar o close e depois o open mesmo.

 

[]'s

Por favor, como Eu faço para que a sql seja informada quanto ao número de orçamento pq o form "cadastro orçamento" esta disposto da seguinte maneira:

 

 

O cliente quando clica em novo orçamento dá um append em todos os campos ai ele vai selecionando os items ai no que ele salva, o campo "autoincremento" do campo "numorca" gera um número.Como informo isso para a sql?

 

 

 

Boa tarde

 

 

Então após ler alguns tutoriais resolvi fazer o "inner join" ficou assim:

 

 

Select sum (total) as ValorTotal from OrcaAcab inner join orcamento on orcamento.CodigoOrçamento = OrcaAcab.CodigoOrçamento;

 

 

Só que consigo activar=true sem problema mas ai o dbrexr fica sem nenhuma iformação pq será?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já verificou se existem registros gravados nas duas tabelas?

 

E outra... não adianta só o inner join, precisa implementar o where como já foi discutido. No fórum tem muitos exemplos de querys usando passagem de valor por referência. Dê uma pesquisada nisto, pois vai precisar.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora fiz assim:

 

 

Select sum (total) as ValorTotal from OrcaAcab inner join orcamento on (OrcaAcab.CodigoOrçamento = Orcamento.CodigoOrçamento) where

 

orcamento.CodigoOrçamento = OrcaAcab.CodigoOrçamento;

 

 

Ai quando clico em active=true ele vai sem proble am mas ainda nao mostra a soma e os dados mas estou suspeitando de algo veja:

 

 

Eu fiz assim tenho um "ADOTABLE" de nome "ADORCA" e outro "ADOTABLE" este "ADOCAB" estes estão num datamodule.

Ai no form coloquei as ADOQUERY1 e um datasource1 ai o que acontece o DBGRID esta ligado ao datasource da ADOTABLE

ADOCAB. Será que para que apareça os dados agora tenho de ligar o datasourc ao ADOQUERY1? mAS SE SIM PQ SERÁ QUE COM SELECT SUM (Total) as total from OrcaAcab; mostrava? Me ajude.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.