none
Select avançado RRS feed

  • Pergunta

  • Bom dia comunidade, etsou enfrentando um desafio no sql.

    Seguinte, possuo uma tabela que se chama objetos e uma tabela que se chama atualiza_valores. Bem....na tabela atualiza_valores eu possuo o objID da tabela objetos. Meu dificuldade é: na tabela atualiza_valores eu possuo os campos atualizavalor e atualizavalornovo que funcionaria como se fosse um log da atualizacao de valores desse objeto. Já na tabela objetos eu possuo o objvalor que é o valor de aquisição desse objeto.

    Dai vem a minha dificuldade, como fazer um select que verifique se existe atualizacao de valores para aquele objeto......caso afirmativo, eu preencheria as propriedades desse objeto e exibiria valor anterior e o valor novo.....caso contrário....só o valor anterior que seria o objvalor (valor de aquisição). Eu nao sei fazer isso no select.

    Se alguém puder me ajudar, agradeço.

    segunda-feira, 8 de outubro de 2012 13:55

Respostas

Todas as Respostas

  • Célio,

    informe duas coisas para podermos lhe ajudar mais facilmente:

    1) A estrurtura de suas tabelas (campos e tipos de dados);

    2) Coloque alguns Inserts com exemplo, para termos dados e facilitar nosso entendimento.


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    segunda-feira, 8 de outubro de 2012 14:22
    Moderador
  • Olá Roberson Ferreira

    A estrutura é a Seguinte:

    TB_OBJETOS

    ObjID int not null pk,

    ObjCod int not null,

    ObjDesc varchar(200) not null,

    ObjValor decimal not null

    TB_ATUALIZA_VALORES

    AtualizaID int not null pk

    ObjID in not null fk

    AtualizaValor decimal

    AtualizaValorNovo decimal

    eu realizo o cadastro do objeto, como valor de aquisição dele (ObjValor).

    Quando realizo uma atualizacao, ele me guarda o valor antigo (atualizavalor) e o valor novo (atualizavalornovo). isso seria para cada atualização.

    Minha duvida é: preciso fazer um relatório na qual preciso fazer um select onde, caso a tabela atualizacoes_valores nao possua uma atualizacao referente ao id, ou seja, caso o bem nao tenha sofrido alteracao de valores, ele me retorne para a tabela Atualizavalornovo o valor de objvalor. Exemplo....o select iria me retornar o valor do objeto e o valor atual o mesmo valor, baseado no objvalor.

    Caso contrário, se tiver ocorrido varias atualizacoes, ele me retorne somente o ultimo, mais recente com objvalor e o atualizavalornovo

    segunda-feira, 8 de outubro de 2012 16:33
  • Será algo como:

    Select
      O.ObjCod,
      O.ObjDesc,
      Valor = Case
                When (AV.ObjID is Null) Then
                  O.ObjValor
                Else
                  AV.AtualizaValorNovo
              End
    From
      TB_OBJETOS O Left Join TB_ATUALIZA_VALORES AV on (AV.ObjID = O.ObjID)


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    segunda-feira, 8 de outubro de 2012 17:36
    Moderador
  • Célio,

    Mas para saber se o valor foi atualizado seria o caso de verificar se o valor do campo atualizarvalornovo esta diferente do campo atualiza_valores?

    Se for isso acredito que você poderia utilizar o comando Case em conjunto como Select.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    segunda-feira, 8 de outubro de 2012 17:39