none
Pesquisa em multiplas tabelas RRS feed

  • 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.

    sexta-feira, 6 de julho de 2007 01:04

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.ID

     

    Abs/

    sexta-feira, 6 de julho de 2007 10:15
  • 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.

    sexta-feira, 6 de julho de 2007 11:29
  • 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

    sexta-feira, 6 de julho de 2007 13:42
  • Benê,

     

    Pode sim, sem problemas!!!

    sexta-feira, 6 de julho de 2007 23:28