Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Asteriscos

Update na mesma tabela

Recommended Posts

Pessoal,

 

Separei a parte da procedure que estou fazendo que não lembro mais como se faz.

 

Possuo uma tabela no seguinte formato:

 

 

tipo cod_produto produto local

A -------- 5 -------- maçã -------- RJ

B -------- 5 -------- NULL -------- RJ

A -------- 7 -------- goiaba -------- SP

B -------- 7 -------- goiaba -------- NULL

A-------- 30 -------- melancia -------- MG

B -------- 30 -------- melancia -------- MG

C -------- 30 -------- NULL -------- NULL

C -------- 30 -------- melancia -------- MG

A -------- 70 -------- laranja -------- DF

B -------- 70 -------- NULL -------- NULL

A -------- 80 -------- limao -------- PE

A -------- 100 -------- uva -------- SP

B -------- 100 -------- NULL -------- NULL

B -------- 100 -------- NULL -------- NULL

A -------- 170 -------- abacate -------- PB

 

 

O objetivo é preencher os campos NULL de tipos diferentes de A com valores existentes na própria tabela de forma dinâmica, utilizando as informações do tipo A.

 

o resultado ficará assim:

 

tipo cod_produto produto local

A -------- 5 -------- maçã -------- RJ

B -------- 5 -------- maçã -------- RJ

A -------- 7 -------- goiaba -------- SP

B -------- 7 -------- goiaba -------- SP

A-------- 30 -------- melancia -------- MG

B -------- 30 -------- melancia -------- MG

C -------- 30 -------- melancia -------- MG

C -------- 30 -------- melancia -------- MG

A -------- 70 -------- laranja -------- DF

B -------- 70 -------- laranja -------- DF

A -------- 80 -------- limao -------- PE

A -------- 100 -------- uva -------- SP

B -------- 100 -------- uva -------- SP

B -------- 100 -------- uva -------- SP

A -------- 170 -------- abacate -------- PB

 

 

 

create table #produtos(tipo varchar(1), cod_produto int,produto varchar(30), local varchar(2))

insert into #produtos (tipo, cod_produto,produto,local) values ('A',5,'maçã','RJ')

insert into #produtos (tipo, cod_produto,produto,local) values ('B',5,NULL,'RJ')

insert into #produtos (tipo, cod_produto,produto,local) values ('A',7,'goiaba','SP')

insert into #produtos (tipo, cod_produto,produto,local) values ('B',7,'goiaba',NULL)

insert into #produtos (tipo, cod_produto,produto,local) values ('A',30,'melancia','MG')

insert into #produtos (tipo, cod_produto,produto,local) values ('B',30,'melancia','MG')

insert into #produtos (tipo, cod_produto,produto,local) values ('C',30,NULL,NULL)

insert into #produtos (tipo, cod_produto,produto,local) values ('C',30,'melancia','MG')

insert into #produtos (tipo, cod_produto,produto,local) values ('A',70,'laranja','DF')

insert into #produtos (tipo, cod_produto,produto,local) values ('B',70,NULL,NULL)

insert into #produtos (tipo, cod_produto,produto,local) values ('A',80,'limao','PE')

insert into #produtos (tipo, cod_produto,produto,local) values ('A',100,'uva','SP')

insert into #produtos (tipo, cod_produto,produto,local) values ('B',100,NULL,NULL)

insert into #produtos (tipo, cod_produto,produto,local) values ('B',100,NULL,NULL)

insert into #produtos (tipo, cod_produto,produto,local) values ('A',170,'abacate','PB')

 

SELECT * FROM #PRODUTOS

 

 

Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Asteriscos,

 

Uma forma de resolver isso seria criar uma tabela virtual ja filtrando o que não é nulo e associar com o cod_produto da tabela real, dae é só fazer um inner join e dar update no campo onde for nulo pro valor da tabela virtual

 

 

--atualizando campo produto

update #PRODUTOS set produto = PV.Produto from #PRODUTOS PRinner join (select * from #PRODUTOS where produto is not null) PV on PV.cod_produto = PR.cod_produto where PR.produto is null

--atualizando campo local

update #PRODUTOS set local = PV.local from #PRODUTOS PRinner join (select * from #PRODUTOS where produto is not null) PV on PV.cod_produto = PR.cod_produto where PR.local is null
Apelidos das tabelas: PR - Produto Real, PV - Produto Virtual

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.