Actualizar sólo 1 fila

25/11/2003 - 20:48 por CAFC | Informe spam
Estimados:
Tengo un problema que me tiene cansadisimo... tengo una
tabla temporal que es generada por un enorrrrrrme conjunto
de select. el tema es que ahora necesito asociar un monto
pero solo a la prmera fila de cada grupo de registros. o
sea tengo lo siguiente:
CLI PROD DESC
Cliente1 Prod1 Descrip1
Cliente1 Prod1 Descrip2
Cliente1 Prod1 Descrip3
Cliente2 Prod1 Descrip1
Cliente2 Prod1 Descrip2
Cliente2 Prod1 Descrip3

a esto le deboa gregar una nueva columna que corresponde a
un monto asociado al cliente, no al producto (para luego
manejarlo en Crystal report), o sea quiero que me devuelva
lo siguiente:

CLI PROD DESC MONTO
Cliente1 Prod1 Descrip1 500
Cliente1 Prod1 Descrip2 0
Cliente1 Prod1 Descrip3 0
Cliente2 Prod1 Descrip1 1300
Cliente2 Prod1 Descrip2 0
Cliente2 Prod1 Descrip3 0

O sea solo necesito un valor por cada grupo de cliente,
ojala me haya explicado bien.
Alguna sugerencia de como hacerlo?

Saludos y gracias.
Cristian.
 

Leer las respuestas

#1 ulises
25/11/2003 - 22:26 | Informe spam
Sí tienes forma de identificar plenamente a los registros
en base a la combinación de campos te aconsejaría realizar
un join entre esa tabla y la tabla que tiene los importes.
En caso que la tabla tenga los registros duplicados la
única forma de actualizar solo un registro del grupo
duplicado es a través de un proceso row-by-row (o sea un
cursor), si se trata de un reporte que se generará
bastante esporádicamente tal vez valga la pena pero si
formará parte de tu proceso diario te aconsejaría que
busques otra alternativa; en todo caso un ejemplo de como
se actualizaría sería :

create table tabla ( clave char(1), cantidad int )
go
insert into tabla values ( 'A',0 )
insert into tabla values ( 'A',0 )
insert into tabla values ( 'A',0 )
insert into tabla values ( 'A',0 )
insert into tabla values ( 'A',0 )
insert into tabla values ( 'B',0 )
insert into tabla values ( 'B',0 )
insert into tabla values ( 'B',0 )
insert into tabla values ( 'B',0 )
insert into tabla values ( 'C',0 )
insert into tabla values ( 'C',0 )
insert into tabla values ( 'C',0 )
insert into tabla values ( 'C',0 )
go

DECLARE @cla as char(1)
DECLARE @old as char(1)

SET @old = ' '

DECLARE tabla_cursor CURSOR FOR
SELECT clave FROM tabla
FOR UPDATE OF cantidad

OPEN tabla_cursor

FETCH NEXT FROM tabla_cursor INTO @cla
WHILE @@FETCH_STATUS = 0
BEGIN
Print @cla
Print @old
IF @cla <> @old UPDATE tabla SET cantidad = 300
WHERE CURRENT OF tabla_cursor
SET @old = @cla
FETCH NEXT FROM tabla_cursor INTO @cla
END

CLOSE tabla_cursor
DEALLOCATE tabla_cursor

Resultados :

clave cantidad
A 300
A 0
A 0
A 0
A 0
B 300
B 0
B 0
B 0
C 300
C 0
C 0
C 0

(13 row(s) affected)



Saludos,
Ulises

Estimados:
Tengo un problema que me tiene cansadisimo... tengo una
tabla temporal que es generada por un enorrrrrrme


conjunto
de select. el tema es que ahora necesito asociar un monto
pero solo a la prmera fila de cada grupo de registros. o
sea tengo lo siguiente:
CLI PROD DESC
Cliente1 Prod1 Descrip1
Cliente1 Prod1 Descrip2
Cliente1 Prod1 Descrip3
Cliente2 Prod1 Descrip1
Cliente2 Prod1 Descrip2
Cliente2 Prod1 Descrip3

a esto le deboa gregar una nueva columna que corresponde


a
un monto asociado al cliente, no al producto (para luego
manejarlo en Crystal report), o sea quiero que me


devuelva
lo siguiente:

CLI PROD DESC MONTO
Cliente1 Prod1 Descrip1 500
Cliente1 Prod1 Descrip2 0
Cliente1 Prod1 Descrip3 0
Cliente2 Prod1 Descrip1 1300
Cliente2 Prod1 Descrip2 0
Cliente2 Prod1 Descrip3 0

O sea solo necesito un valor por cada grupo de cliente,
ojala me haya explicado bien.
Alguna sugerencia de como hacerlo?

Saludos y gracias.
Cristian.
.

Preguntas similares