Inquiridor
Pesquisa em multiplas tabelas

Pergunta
-
Caros Colegas
Preciso fazer uma determinada pesquisa em mais de uma tabela, e retornar um único resultado, não sei se devo fazer uma Function ou uma SP, gostaria da opnião de vocês e ajuda para montar a query.
Cenário:
No momento de uma venda, preciso determinar o desconto concedido para a mercadoria vendida à um cliente.
Existem 4 Tabela que devo pesquisar com uma determinada prioridade.
DescGrupo, saber se o cliente pertence a este grupo.
DescSeção, saber se o produto pertence a esta seção.
DescFichaItem, saber se no cadastro do item tem algum desconto.
DescEspCliente, saber se no cadastro do cliente tem um desconto.
O desconto a ser consedido, será o da Tabela DescEspCliente, sobre as demais, a não ser que o Cliente esteja na tabela DescGrupo, ai será o valor de DescGrupo.
Mas se este valor for 0 ou Null, prevalece o da Tabela DescFichaItem, a não ser que o item esteja na tabela de DescSeção.
Mas se este valor for 0 ou Null, prevalece o da Tabela DescSeção,
Mas se este valor for 0 ou Null, prevalece o da Tabela DescGrupo.
Para piorar entre as Tabelas DescGrupo e DescSeção, prevalece a de maior valor.
Por favor, preciso de ajuda para criar a query, e definir se uso Function ou SP.
Obrigado a todos que conseguiram ler este Post.
Todas as Respostas
-
como sao muitas tabelas o legal seria saber +- qual o relacionamento entre elas. mais esse e um exemplo ( bem simples) de com eu acho que a logica deveria ser feita. nao sei ao certo de esta bem como vc. quer mais segue
Create Table #Selecao (ID Int, Valor_Selecao int)
Create Table #Selecao2 (ID Int, Valor_Selecao int)
Create Table #Selecao3 (ID Int, Valor_Selecao int)
Insert into #Selecao (ID, Valor_Selecao ) Values (1,10)
Insert into #Selecao2 (ID, Valor_Selecao ) Values (2,20)
Insert into #Selecao2 (ID, Valor_Selecao ) Values (1,20)Insert into #Selecao3 (ID, Valor_Selecao ) Values (3, null)
Select Valor = Case When #Selecao.Valor_Selecao >= #Selecao2.Valor_Selecao Then 'Valor selecao'
When #Selecao2.Valor_Selecao >= #Selecao3.Valor_Selecao Then 'Valor selecao 2' Else 'Geral' End
From #Selecao Left Join #Selecao2 on #Selecao2.ID = #Selecao.ID
Left Join #Selecao3 On #Selecao3.ID = #Selecao.IDAbs/
-
Benê,
Como o próprio Marcelo sitou, seria melhor saber o relacionamento entre estas tables, mas você poderá fazer um Inner Join ou até mesmo um Left Join entre elas.
Mas o exemplo do Marcelo, ajuda a entender bem a sua necessidade, com certeza vai pode auxiliar.
-
Caros Colegas
Estou notando que preciso verificar os dados e depois fazer a comparação, acontece que a verificação de dados seria atrávez de um SELECT com WHERE, eu posso fazer isto, armazenar em variável e depois fazer a comparação com o CASE?
TIPO:
SELECT
CASE WHEN ( SELECT XXX, YYY, WWW FROM AAA WHERE XXX) IS NULL THEN
CASE WHEN ( SELECT HHH, MMM, OOO FROM BBB WHERE CCC) IS NULL THEN
END
END
Desculpem, sei que é absurdo o exemplo, mas algo semelhante também funcionaria.
Obrigado
Bene
-