[Resolvido] Atualizar coluna com valor da linha anterior

1 resposta
xandevieira

tenho que atualizar uma coluna de uma tabela com a informacao de um campo da mesma tabela, so q da linha anterior.

ex.
a tabela tem as coluna
nupatrimonio, nuhistoricobem, cdsetorobra, cdsetorinicial, cdtipomovimento

a coluna q preciso atualizar eh o cdsetorinicial com a informacao da coluna cdsetorobra

eu empaquei update esipHistoricoBem h set h.cdSetorInicial = h.cdsetorobra where h.cdtipomovimento = 1 and h.nuhistoricobem = nuhistoricobem - 1
so q tem um problema, nuhistoricobem nao necessariamente existirar o valor -1 ou seja
se eu esiver atualizando o 20, o 19 pode nao existir e sim o 12, ou ser o unico, neste caso eu atualizo com o cdsetorobra dele mesmo.

1 Resposta

xandevieira

Foi criado uma coluna temporaria, sequenciada, e feito update pela coluna -1.
Banco utilizado: Firebird

ALTER TABLE ESIPHISTORICOBEM ADD NUORDEM DECIMAL(9,0);

CREATE SEQUENCE GEN_Esiphistoricobem;

update esiphistoricobem
   set cdsetorinicial = null;

UPDATE Esiphistoricobem A
 SET A.NUORDEM  =GEN_ID(GEN_Esiphistoricobem, 1)
 WHERE A.nupatrimonio=(SELECT X.NUPATRIMONIO FROM ESIPHISTORICOBEM X
 WHERE X.nupatrimonio=A.nupatrimonio
 group BY X.NUPATRIMONIO)
 ORDER BY  nupatrimonio,nuhistoricobem

UPDATE Esiphistoricobem A
  SET A.cdsetorinicial= (select b.cdsetorinicial from esiphistoricobem b where
  A.nuordem=b.nuordem-1 and a.nupatrimonio=b.nupatrimonio);

UPDATE Esiphistoricobem A
   SET A.cdsetorinicial=A.cdsetorobra
 where cdsetorinicial is null

ALTER TABLE ESIPHISTORICOBEM DROP NUORDEM;

DROP SEQUENCE GEN_ESIPHISTORICOBEM;
Criado 28 de setembro de 2011
Ultima resposta 30 de set. de 2011
Respostas 1
Participantes 1