none
UPDATE comparando campos da mesma tabela RRS feed

  • Pergunta

  • Boa tarde!

    Estou com um problema que acredito ser simples, mas não consigo pensar em como resolve-lo.

    Tenho 1 tabela com 3 campos. Dois são status e um de código.

    Essa tabela tem em torno de 200 mil itens, sendo que metade deles o código vai de 1 a 100.000 e a outra metade é vai de CA1 até CA100.000.

    O que eu preciso é pegar o os dois campos status dos códigos com CA e colocar nos campos do código sem o CA.

    Não sei se conseguir explicar minha dúvida.

    Desde já agradeça a atenção de todos.

    Abc,

    sexta-feira, 22 de agosto de 2014 17:39

Respostas

Todas as Respostas

  • Boa tarde,

    Experimente mais ou menos dessa forma:

    update t
    set t.status1 = c.status1, t.status2 = c.status2
    from Tabela as t
    inner join Tabela as c
        on c.Codigo = 'CA' + t.Codigo
    where
        t.Codigo between '1' and '100.000'

    Espero que ajude.


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

    sexta-feira, 22 de agosto de 2014 17:50
  • Olá, primeiramente muito obrigado!

    É que na verdade, essa tabela não tem somente estes código, tem diversos, mas eu só preciso mexer nos que tem nos que tem duplicado com o CA na frente...

    Sei que a sintaxe esta errada, mas o que eu estava tentando fazer é mais ou menos o seguinte:

    UPDATE  
    ITEM_ESTOQUE_PUB SCA 
    SET 
    SCA.CODIGO_TRIBUTACAO_E = CCA.CODIGO_TRIBUTACAO_E,
    CCA.CODIGO_TRIBUTACAO_S = SCA.CODIGO_TRIBUTACAO_S
    FROM (
    select 
    ITEM_ESTOQUE_PUB, 
    CODIGO_TRIBUTACAO_E, 
    CODIGO_TRIBUTACAO_S 
    from PEC_ITEM_ESTOQUE SSA
    where ITEM_ESTOQUE_PUB IN (
    select ITEM_ESTOQUE_PUB from PEC_ITEM_ESTOQUE CCA
    where ITEM_ESTOQUE_PUB like  ('CA%'))) CCA
    INNER JOIN 
    PEC_ITEM_ESTOQUE SCA 
    ON 
    CCA.ITEM_ESTOQUE_PUB = 'CA' + SCA.ITEM_ESTOQUE_PUB

    Se puderes ajudar, serei muito grato!

    sexta-feira, 22 de agosto de 2014 18:59
  • Daniel,

    Poderia tentar nos explicar o porque você esta fazendo uso de uma Tabela Derivada no comando From do seu Update?

    Não seria mais fácil utilizar no comando Where a subquery, realmente o seu código esta um pouco confuse de se entender.

    Mas veja se esta pequena alteração, já ajuda:

    UPDATE ITEM_ESTOQUE_PUB
    SET SCA.CODIGO_TRIBUTACAO_E = CCA.CODIGO_TRIBUTACAO_E,
        CCA.CODIGO_TRIBUTACAO_S = SCA.CODIGO_TRIBUTACAO_S
    FROM (Select ITEM_ESTOQUE_PUB, 
                 CODIGO_TRIBUTACAO_E, 
                 CODIGO_TRIBUTACAO_S 
          from PEC_ITEM_ESTOQUE SSA
          where ITEM_ESTOQUE_PUB IN (select ITEM_ESTOQUE_PUB from PEC_ITEM_ESTOQUE CCA
                                     where ITEM_ESTOQUE_PUB like ('CA%'))) CCA
         INNER JOIN PEC_ITEM_ESTOQUE SCA 
          ON CCA.ITEM_ESTOQUE_PUB = 'CA' + SCA.ITEM_ESTOQUE_PUB 
    Se você observar eu removi o primeiro apelido que estava no comando Update.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com


    sexta-feira, 22 de agosto de 2014 19:11
  • Daniel, 

    Acredito que o comando que sugeri vai funcionar da forma como você espera, pois o Inner Join vai restringir a atualização as linhas que possuem outra linha com o 'CA' no início.

    Adaptando o comando para os nomes da tabela e das colunas ficaria da seguinte forma:

    update sca
    set 
        sca.CODIGO_TRIBUTACAO_E = cca.CODIGO_TRIBUTACAO_E, 
        sca.CODIGO_TRIBUTACAO_S = cca.CODIGO_TRIBUTACAO_S
    from PEC_ITEM_ESTOQUE as sca
    inner join PEC_ITEM_ESTOQUE as cca
        on cca.ITEM_ESTOQUE_PUB = 'CA' + sca.ITEM_ESTOQUE_PUB

    Espero que ajude.


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

    sexta-feira, 22 de agosto de 2014 19:19