Junção de tabelas complicada com sql

18/01/2006

Bem é o sequinte:
Tenho 4 tabelas sendo
OS, Itemos, Produto, Serviço
preciso fazer uma busca e imprimir os dados das tabelas em QR.
fiz desta maneira e esta dando erro.

Select * From PRODUTOS,RECEITAS,ITEMOS where RECEITAS.NUMERO = ITEMOS.OS and ITEMOS.PRODUTO = PRODUTOS.DESCRICAO AND RECEITAS.NUMERO =´+QuotedStr(Nuos.text));

Neste caso, não retornar nenhum item, se tiro SERVICO, retornar os itens de produto, mas não o serviço, preciso retornar para o campo codigo do relatório a ref_fornecedor dos produtos e serviços.
alguem poderia me ajudar a resolver esta questão?
A Ideia é localiza na tabela ITEMOS todos os produtos e retornar para o campo Codigo a REF_FORN, depois retornar os Serviços e para o campo CODIGO a REF_FORNE da tabela serviços
Desde ja agradeço qualquer ajuda.

Claudio Pinho


Dpinho

Respostas

23/01/2006

Dpinho

Amigos, preciso disto com urgencia, me ajudem


Responder Citar

23/01/2006

Tnaires

Olá
Eu não consegui entender mto bem o q vc quer.

´não retornar nenhum item, se tiro SERVICO, retornar os itens de produto, mas não o serviço, preciso retornar para o campo codigo do relatório a ref_fornecedor dos produtos e serviços. ´

Seja mais claro.
E, se possível, coloque aqui as estruturas da tabela.

Abraços


Responder Citar

23/01/2006

Tnaires

Bom, pelo pouco q eu entendi, talvez uma UNION resolva seu problema.

(Consulta que retorna os fornecedores da tabela ITEMOS)
UNION
(Consulta que retorna os fornecedores da tabela SERVICOS)

Abraços


Responder Citar

23/01/2006

Dpinho

Bom, pelo pouco q eu entendi, talvez uma UNION resolva seu problema. (Consulta que retorna os fornecedores da tabela ITEMOS) UNION (Consulta que retorna os fornecedores da tabela SERVICOS) Abraços


poderia me dar um exemplo???


Responder Citar

23/01/2006

Tnaires

Fica difícil dar um exemplo sem vc explicar as estruturas das tabelas que vc usa. Detalhe mais a estrutura do banco.


Responder Citar

23/01/2006

Dpinho

Fica difícil dar um exemplo sem vc explicar as estruturas das tabelas que vc usa. Detalhe mais a estrutura do banco.


Tabelas Vendas
Numero, Valortotal


Tabela Itemvendas
Ref_Produto
Descrição
Valor unitario
Quantidade

Sendo que nesta tabela tambem gravo tanto produtos como serviços

Tabela Serviços
Ref_Serviço
Descrição
Valor

Tabela produtos
codigo
Ref_Forn
Descrição
Valor

O meu relatorio esta imprimindo o Cabeçalho da OS, mas quando tenho que imprimir os itens, preciso localizar na tabela de Items todos os produtos e tambem todos os serviços, como gravo na tabela somente a descrição do produto tenho que localizar na tabela produtos e retornar a ref_forn, depois tenho que localizar os serviços na tabela de serviços e retonar o codigo do serviço tambem buscando pelo campo produto da tabela de itens.
bem se não incluo somente os produtos fica tudo bem, so não sai a REf_Forn, mas se tentar colocar os serviços não retornar nada, nem mesmo os produtos.
agradeço qualquer ajuda


Responder Citar

23/01/2006

Tnaires

OK.
Pelo que eu entendi:

- vc grava produtos e serviços em ItensVendas;
- a relação entre itens e produtos é ItensVendas.Descricao e Produtos.Descricao;
- a relação entre itens e serviços é ItensVendas.Ref_Produto e Servicos.Ref_Servico.

Se Ref_Forn e Ref_Servico forem do mesmo tipo de dados, uma operação UNION pode ser efetuada da seguinte forma:
SELECT P.Ref_Forn FROM Produtos P
INNER JOIN ItensVendas I ON
(I.Descricao = P.Descricao)
UNION
SELECT S.Ref_Servico FROM Servicos S
INNER JOIN ItensVendas I ON
(I.Ref_Produto = S.Ref_Servico)

Essa consulta retorna todos os fornecedores dos produtos e acrescenta ao resultado todos os serviços.
Cada campo adicional deve ser colocado nas duas consultas, e devem ser do mesmo tipo de dados.
Esta resposta foi baseada no q eu entendi do seu problema. Se eu entendi errado, por favor me desculpe.
Abraços


Responder Citar

23/01/2006

Dpinho

- a relação entre itens e serviços é ItensVendas.Ref_Produto e Servicos.Ref_Servico.

[color=red:c350610be7]
a relação entre itens e serviços é ItensVendas.descrição e Servicos.descriçao[/color:c350610be7]

Obrigado pela sua ajuda ate aqui


Responder Citar

24/01/2006

Tnaires

Ah, blz.
Então é só mudar a última linha.
SELECT P.Ref_Forn FROM Produtos P
INNER JOIN ItensVendas I ON
(I.Descricao = P.Descricao)
UNION
SELECT S.Ref_Servico FROM Servicos S
INNER JOIN ItensVendas I ON
(I.Descricao = S.Descricao) -- essa linha mudou

Teste a consulta e fale pra nós se era o q vc queria.
Abraços.


Responder Citar