Usuário com melhor resposta
UPDATE comparando campos da mesma tabela

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,
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
- Sugerido como Resposta Durval RamosModerator sexta-feira, 22 de agosto de 2014 18:15
- Marcado como Resposta Ricardo Barbosa Cortes sexta-feira, 22 de agosto de 2014 20:14
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
- Sugerido como Resposta Durval RamosModerator sexta-feira, 22 de agosto de 2014 18:15
- Marcado como Resposta Ricardo Barbosa Cortes sexta-feira, 22 de agosto de 2014 20:14
-
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_PUBSe puderes ajudar, serei muito grato!
-
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
- Editado Junior Galvão - MVPMVP sexta-feira, 22 de agosto de 2014 19:16
-
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