none
relacionar duas tabelas - update set RRS feed

  • Pergunta

  • Eu tenho duas tabelas, 
    tabela1 e tabela2. / int N~ nulo
    não tem ID

    Na tabela1  (SOMENTE UM REGISTRO)
    N1   N2  N3   N4  N5   
    1    2   0    4   0

    Eu quero fazer um update/SET na Tabela2, buscando da tabela1. 
    Tabela2 (vários registros)
    N1   N2  N3   N4  N5  valor
    1    0   3    4   5     2 (valorde outra consulta)
    1    2   0    0   5     3 (valorde outra consulta)
    1    2   0    4   5     4       idem
    0    2   3    4   0     0       idem
    1    2   3    0   5     1       idem


    A intenção e zerar o campo Valor da tabela2
    update tabela2 set valor=0

    Resultado esperado......
    em seguida atualizar, algo parecido com o que segue:

    E a tabela2 ficaria assim:
    N1   N2  N3   N4  N5  valor
    1    0   3    4   5     2 
    1    2   0    0   5     2 
    1    2   0    4   5     3       
    0    2   3    4   0     2       
    1    2   3    0   5     2       

    Para quem esta iniciando até perguntar é difícil.
    Agradeço antecipadamente aos amigos pela atenção.
    Fernando Fornarolo
    sexta-feira, 31 de julho de 2015 16:18

Respostas

  • ......

    Fiz algumas alterações após várias tentativas,  

    case when t2.N1 = T1.NI    AND T2.NI   then 1 else 0 end +

    idem ....

    Aparentemente deu certo, vou confirmar na caneta.

    obrigado pela dica,isto é, pela aula.

    Fernando Fornarolo


    • Marcado como Resposta Forna2015 domingo, 2 de agosto de 2015 12:30
    sábado, 1 de agosto de 2015 15:43

Todas as Respostas

  • Olá Fernando,

    Tudo bem?

    Em qual ponto do seu projeto você está tendo dificuldade? Poderia postar o trecho de código com o qual está tendo algum tipo de dificuldade?

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 31 de julho de 2015 17:05
  • Boa tarde,

    Relacionar duas tabelas, se não tivesse que recorrer da tabela1, faria assim e funciona bem:

    UPDATE tabela2 SET valor =valor+1 WHERE N1=1
    UPDATE tabela2 SET valor =valor+1 WHERE N4=4
    UPDATE tabela2 SET valor =valor+1 WHERE N5=5
    UPDATE tabela2 SET valor =valor+1 WHERE N8=8
    UPDATE tabela2 SET valor=valor+1 WHERE N9=9
    UPDATE tabela2 SET valor=valor+1 WHERE N10=10

    obrigado

    sexta-feira, 31 de julho de 2015 17:17
  • Boa noite,

    Não sei se entendi corretamente a sua questão, mas se você quer somar 1 "ponto" se a coluna da Tabela2 tem o mesmo valor na mesma coluna da Tabela1 experimente mais ou menos dessa forma:

    with CTE_Soma as
    (
        select
            t2.*,
            case when t2.N1 = t1.N1 then 1 else 0 end +
            case when t2.N2 = t1.N2 then 1 else 0 end +
            case when t2.N3 = t1.N3 then 1 else 0 end +
            case when t2.N4 = t1.N4 then 1 else 0 end +
            case when t2.N5 = t1.N5 then 1 else 0 end as ValorCalc
        from Tabela2 as t2
        cross join Tabela1 as t1
    )
    
    update CTE_Soma
    set Valor = ValorCalc
    

    Se não for isso, acho melhor você tentar explicar como deve ser calculado o valor a ser gravado  na coluna Valor.

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 31 de julho de 2015 21:41
  • Bom dia, parece que funciona ...

    Quando fiz as substituições nas minhas tabelas deve ter invertido tabela2 por tabela1,pois, a somatória do valor ficou na outra tabela. Vou inverter os  nomes das tabelas, deve resolver.

    Ainda tem um problema, eu quero a somatória somente dos valores positivos, isto é, quando ambos forem 0 eu não quero acumular na somatória.

    Como proceder?

    + uma vez obrigado pela atenção.

    Fernando Fornarolo

    sábado, 1 de agosto de 2015 12:57
  • ......

    Fiz algumas alterações após várias tentativas,  

    case when t2.N1 = T1.NI    AND T2.NI   then 1 else 0 end +

    idem ....

    Aparentemente deu certo, vou confirmar na caneta.

    obrigado pela dica,isto é, pela aula.

    Fernando Fornarolo


    • Marcado como Resposta Forna2015 domingo, 2 de agosto de 2015 12:30
    sábado, 1 de agosto de 2015 15:43
  • O comando que sugeri deveria atualizar a Tabela2, que foi o que eu tinha entendido.

    Sobre os números positivos, experimente mais ou menos dessa forma:

            case when t2.N1 > 0 and t2.N1 = t1.N1 then 1 else 0 end +
    

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    sábado, 1 de agosto de 2015 22:42