Eliminar sobrantes de una tabla

28/02/2008 - 21:21 por Carlos Sancho | Informe spam
Hola a todos

Tengo una tabla con 3 campos (codigo, c1,c2).
Estoy buscando una sola instrucción T-SQL para eliminar todos los registros
menos el primero cuyo campo codigo sea igual, es decir, quedarme con un
único registro para cada codigo.
Ejemplo:
codigo c1 c2
registro 1: 001 0 7
registro 2: 001 2 5
registro 3: 001 4 6
registro 4: 002 3 7
registro 5: 002 7 9
registro 6: 003 1 2


y al ejecutar la instrucción T-SQL que quede:

codigo c1 c2
registro 1: 001 0 7
registro 2: 002 3 7
registro 3: 003 1 2

Gracias por cualquier sugerencia

Saludos

Carlos Sancho

Preguntas similare

Leer las respuestas

#1 jcac
28/02/2008 - 22:11 | Informe spam
Hola Carlos,

Espero que esto te ayude:

create table #tmp(codigo char(3), c1 int, c2 int)
go
insert into #tmp values('001', 0, 7)
insert into #tmp values('001', 2, 5)
insert into #tmp values('001', 4, 6)
insert into #tmp values('002', 4, 6)
insert into #tmp values('002', 3, 7)
insert into #tmp values('003', 1, 2)
go
select t.codigo, min(t.c1), (select c2 from #tmp where codigo = t.codigo and
c1 = min(t.c1))
from #tmp t
group by t.codigo
go
select * from #tmp
go
drop table #tmp
go

Saludos

Juan Carlos

"Carlos Sancho" escribió en el mensaje
news:
Hola a todos

Tengo una tabla con 3 campos (codigo, c1,c2).
Estoy buscando una sola instrucción T-SQL para eliminar todos los
registros menos el primero cuyo campo codigo sea igual, es decir, quedarme
con un único registro para cada codigo.
Ejemplo:
codigo c1 c2
registro 1: 001 0 7
registro 2: 001 2 5
registro 3: 001 4 6
registro 4: 002 3 7
registro 5: 002 7 9
registro 6: 003 1 2


y al ejecutar la instrucción T-SQL que quede:

codigo c1 c2
registro 1: 001 0 7
registro 2: 002 3 7
registro 3: 003 1 2

Gracias por cualquier sugerencia

Saludos

Carlos Sancho


Respuesta Responder a este mensaje
#2 Alejandro Mesa
28/02/2008 - 22:20 | Informe spam
Carlos Sancho,

Cual es el criterio a usar para identificar una fila como la primera dentro
de un mismo codigo?

Por ejemplo, de las sgtes filas:

registro 4: 002 3 7
registro 5: 002 7 9




Que criterio podemos usar para identificar el registro 4 como el primero
para el codigo = 002?


AMB




"Carlos Sancho" wrote:

Hola a todos

Tengo una tabla con 3 campos (codigo, c1,c2).
Estoy buscando una sola instrucción T-SQL para eliminar todos los registros
menos el primero cuyo campo codigo sea igual, es decir, quedarme con un
único registro para cada codigo.
Ejemplo:
codigo c1 c2
registro 1: 001 0 7
registro 2: 001 2 5
registro 3: 001 4 6
registro 4: 002 3 7
registro 5: 002 7 9
registro 6: 003 1 2


y al ejecutar la instrucción T-SQL que quede:

codigo c1 c2
registro 1: 001 0 7
registro 2: 002 3 7
registro 3: 003 1 2

Gracias por cualquier sugerencia

Saludos

Carlos Sancho



Respuesta Responder a este mensaje
#3 Luis Mata
28/02/2008 - 23:05 | Informe spam
Mira esto te puede ayudar si no tienes un id
declare @codigo char(3)
declare @dato char(3),@vid varchar(50), @viden int, @indicador int, @dato2
char(3)
set @indicador = 0
select newid() as id, codigo,iden into tabtemp from tablaorifinal
declare temporal CURSOR for select id,codigo,iden from tabtemp
open temporal
fetch next from temporal into @vid, @dato,@viden
while @@fetch_status = 0
begin
set @indicador = @indicador + 1
IF @dato = @dato2 AND @indicador!=1
delete from tabtemp where id = @vid
else
set @dato2 = @dato
fetch next from temporal into @vid, @dato,@viden
end
deallocate temporal
select * from tabtemp
drop table tabtemp
los campos que use para probarlos son mios asi que tu puedes reemplazar con
los tuyos y añadir los tuyos este es el resultado el 1 es un borrado es
prueba:

C91F2AA4-6ED4-43C7-BFF9-74C7D11BF546 001 NULL
51BBAB97-B4F5-443A-BBD1-4D6BFE3207B0 001 1
0A2C5E5D-3342-4A4E-8C56-F215E90E15FA 001 1
60E6B6B4-F80B-4210-8035-128FFAE2C28F 002 NULL
F86A1D52-9F94-4C85-9DAE-632CC5A0C188 002 1
12850F21-48F9-4409-BA7C-C293E7EA8DBE 003 NULL
B15E17C0-1EC7-4170-B2FB-D01B9C996CA9 003 1
75639270-2180-4A93-B3EC-A65166E0A33B 003 1

haber si te sirve


"Carlos Sancho" escribió en el mensaje
news:
Hola a todos

Tengo una tabla con 3 campos (codigo, c1,c2).
Estoy buscando una sola instrucción T-SQL para eliminar todos los
registros menos el primero cuyo campo codigo sea igual, es decir, quedarme
con un único registro para cada codigo.
Ejemplo:
codigo c1 c2
registro 1: 001 0 7
registro 2: 001 2 5
registro 3: 001 4 6
registro 4: 002 3 7
registro 5: 002 7 9
registro 6: 003 1 2


y al ejecutar la instrucción T-SQL que quede:

codigo c1 c2
registro 1: 001 0 7
registro 2: 002 3 7
registro 3: 003 1 2

Gracias por cualquier sugerencia

Saludos

Carlos Sancho


Respuesta Responder a este mensaje
#4 Carlos Sancho
29/02/2008 - 12:12 | Informe spam
Gracias a todos, !!! no me acordaba de GROUP !!!. Con eso podré hacerlo
fácilmente.

Saludos

"Carlos Sancho" escribió en el mensaje
news:
Hola a todos

Tengo una tabla con 3 campos (codigo, c1,c2).
Estoy buscando una sola instrucción T-SQL para eliminar todos los
registros menos el primero cuyo campo codigo sea igual, es decir, quedarme
con un único registro para cada codigo.
Ejemplo:
codigo c1 c2
registro 1: 001 0 7
registro 2: 001 2 5
registro 3: 001 4 6
registro 4: 002 3 7
registro 5: 002 7 9
registro 6: 003 1 2


y al ejecutar la instrucción T-SQL que quede:

codigo c1 c2
registro 1: 001 0 7
registro 2: 002 3 7
registro 3: 003 1 2

Gracias por cualquier sugerencia

Saludos

Carlos Sancho


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida