COMO FAZER ESSA CONSULTA

USUARIO.EXCLUIDOS 04/01/2005 16:29:16
#58573
Estou utilizando FireBird e VB6.
Tenho duas tabelas uma com ordens de servicos e outra com venda.Tanto na venda quando no serivco eu posso gravar os produtos vendidos ou usuados no servico.quero gerar uma unica nota fiscal de produtos utilizando as duas tabelas.Sabendo que as duas estao relacionadas com a tabela produto o os campos diferente entre elas é o num_venda e o num_os.Tenho que somar as quantidades dos produtos que estiverem nas vendas e nos serviços quando forem iguais...
Ate agora ja consegui criando um Union somar as quantidades e seleciona-los porem em algumas ordens de servicos ou vendas ele não soma e duplica a exibição do produto no grid.

este é o codigo que ate agora deu mais ou menos certo

If Venda <> "" And OS = "" Then
SQLText = "select a.cod_produto codigo, a.vlr_cobrar, sum(vlr_total) valor, sum(a.qtd) quant, c.nom_tipoprod, d.nom_marca, b.dsc_produto descricao " & _
"from prod_venda a,produto b, tipo_prod c, marca d " & _
"where a.num_venda in (" & Venda & ") and " & _
" a.cod_produto = b.cod_produto and " & _
" c.cod_tipoprod = b.cod_tipoprod and " & _
" d.cod_marca = b.cod_marca " & _
"group by a.cod_produto, a.vlr_cobrar, c.nom_tipoprod, d.nom_marca, b.dsc_produto " & _
"order by a.cod_produto"

ElseIf OS <> "" And Venda = "" Then
SQLText = " select a.cod_produto codigo, a.vlr_cobrar, sum(vlr_total) valor, sum(a.qtd) quant, c.nom_tipoprod, d.nom_marca, b.dsc_produto descricao " & _
"from prod_os a,produto b, tipo_prod c, marca d " & _
"where a.num_os in (" & OS & ") and " & _
" a.cod_produto = b.cod_produto and " & _
" c.cod_tipoprod = b.cod_tipoprod and " & _
" d.cod_marca = b.cod_marca " & _
"group by a.cod_produto, a.vlr_cobrar, c.nom_tipoprod, d.nom_marca, b.dsc_produto " & _
"order by a.cod_produto "
ElseIf OS <> "" And Venda <> "" Then
SQLText = "select a.cod_produto codigo, a.vlr_cobrar, sum(vlr_total) valor, sum(a.qtd) quant, c.nom_tipoprod, d.nom_marca, b.dsc_produto descricao " & _
"from prod_venda a,produto b, tipo_prod c, marca d " & _
"where a.num_venda in (" & Venda & ") and " & _
" a.cod_produto = b.cod_produto and " & _
" c.cod_tipoprod = b.cod_tipoprod and " & _
" d.cod_marca = b.cod_marca " & _
"group by a.cod_produto, a.vlr_cobrar, c.nom_tipoprod, d.nom_marca, b.dsc_produto " & _
"UNION all select a.cod_produto codigo, a.vlr_cobrar, sum(vlr_total) valor, sum(a.qtd) quant, c.nom_tipoprod, d.nom_marca, b.dsc_produto descricao " & _
"from prod_os a,produto b, tipo_prod c, marca d " & _
"where a.num_os in (" & OS & ") and " & _
" a.cod_produto = b.cod_produto and " & _
" c.cod_tipoprod = b.cod_tipoprod and " & _
" d.cod_marca = b.cod_marca " & _
"group by a.cod_produto, a.vlr_cobrar, c.nom_tipoprod, d.nom_marca, b.dsc_produto " & _
"order by 1 "

Help!!!
ANDRERP 05/01/2005 14:44:15
#58799
Pessoal é o seguinte.

Temos uma tabela PROD_VENDA, que armazena os produtos selecionados em cada venda, e a tabela PROD_OS, que armazena os produtos selecionados em cada OS. Daí, queremos na hora de emitir a NF juntar várias vendas e OS realizadas durante um tempo em uma única NF. Queremos saber como podemos fazer a união destes produtos, de modo que eles não repitam quando forem iguais, agrupando eles mesmo que esteja nas duas tabelas, e apenas somar as quantidades, e os valores dos repetidos num só ! esse código aí quase dá certo, mas quando é de uma tabela e outro igual na outra tabela não faz isso, fica separado.
USUARIO.EXCLUIDOS 05/01/2005 16:26:00
#58831
Você precisaria de algum código comum entre elas, dessa forma você relacionaria esse código entre essas duas tabelas e não duplicaria registros.
Caso contrário, se você tentar ligar todos os outros campos (que foi comentado que são iguais nas duas tabelas, existiria a possibilidade de duplicidade.
Ex:Imagine existm duas OS idênticas e duas vendas identicas, você qudruplicaria seu resultado.
Ou seja, você teria um código único entre as duas tabelas que faria com que isso não acontecesse

Ou então criar uma terceira tabela que faria a ligação dessas duas:
Ex.: a terceira tabela teria o código 234 que faria a ligação do código OS 456 e da venda 678

Espero ter ajudado
Tópico encerrado , respostas não são mais permitidas