UPDATE DE UMA TABELA

FERRUBIM 30/05/2015 10:36:41
#447211
alguem poderia me ajudar nesse update ..o problema é que a cada quebra de id_cliente queria que começasse do 1 ou seja ,se tenho
id = 1000 queria sq_lancto 1 depois 2,depois 3 e assim vai .. quando viesse o id = 1001 queria q começasse de novo com 1,2,3,e ai vai ...

DECLARE @id INT
SET @id = 0
UPDATE TAB_OBSERVACOESCOBRANCA
SET @id = SQ_LANCTO = @id + 1
WHERE ID_CLIENTE IN (SELECT ID_CLIENTE FROM TAB_OBSERVACOESCOBRANCA )
RO.DRIGOSG 19/06/2015 16:01:42
#447886
Resposta escolhida
FERRUBIM,

Fiz um exemplo no Oracle , mas no SQL é a mesma lógica, ok. Segue abaixo exemplo:

CREATE TABLE TAB_OBSERVACOESCOBRANCA
(
ID INT NULL
,ID_CLIENTE INT NULL
,ID_PROD INT NULL
);

INSERT INTO TAB_OBSERVACOESCOBRANCA VALUES (NULL, 1,11);
INSERT INTO TAB_OBSERVACOESCOBRANCA VALUES (NULL, 1,15);
INSERT INTO TAB_OBSERVACOESCOBRANCA VALUES (NULL, 1,23);
INSERT INTO TAB_OBSERVACOESCOBRANCA VALUES (NULL, 1,87);
INSERT INTO TAB_OBSERVACOESCOBRANCA VALUES (NULL, 2,88);
INSERT INTO TAB_OBSERVACOESCOBRANCA VALUES (NULL, 2,63);
INSERT INTO TAB_OBSERVACOESCOBRANCA VALUES (NULL, 2,56);


DECLARE

ID_SEQ NUMBER(10) :=0;
ID_CLI_ATU NUMBER(10) :=0;
ID_CLI_ANT NUMBER(10) :=0;

BEGIN

FOR C_PROCESSO IN
(
SELECT ID_CLIENTE, ID_PROD FROM TAB_OBSERVACOESCOBRANCA ORDER BY ID_CLIENTE
)
LOOP

ID_CLI_ATU := C_PROCESSO.ID_CLIENTE;

IF (ID_SEQ = 0) THEN
ID_SEQ := 1;
ELSIF (ID_CLI_ATU = ID_CLI_ANT) THEN
ID_SEQ := ID_SEQ + 1;
ELSE
ID_SEQ := 1;
END IF ;

UPDATE TAB_OBSERVACOESCOBRANCA SET ID = ID_SEQ
WHERE
ID_CLIENTE = C_PROCESSO.ID_CLIENTE
AND ID_PROD = C_PROCESSO.ID_PROD;
COMMIT;

ID_CLI_ANT := C_PROCESSO.ID_CLIENTE;

END LOOP;

END;


Obs,: Para funcionar, você tem que ter mais de uma condição no Where do UPDATE, senão, vai sair tudo com o mesmo valor e que será o valor do último Update. Por isso acrescentei o ID_PROD para diferenciar os registros no exemplo. Dai você muda de acordo com os dados da sua tabela;
Tópico encerrado , respostas não são mais permitidas