Podeis ayudarme con esta consulta?

10/06/2005 - 20:54 por Marina Prada | Informe spam
Hola,

Estoy haciendo un programa en VB6.0 y BBDD en Access o SQL, eso me daría
igual, y tengo un problema a la hora de realizar una filtracion de unos
campos duplicados de una consulta.
Me han ayudado mucho desde el grupo de Visual Basic pero todavía no consigo
hacer lo que quiero y me da un poco de apuro seguir con el mismo tema en ese
grupo entre otras cosas porque creo que puse un ejemplo confundido, asi que
os lo pregunto a vosotros a ver si alguien me puede ayudar. Os pongo el hilo
iniciado y perdonar si es muy largo:

Esta es un ejemplo de la tabla:

Codigo_cliente Nombre Tipo_Contrato

001 Pepe Total
001 Pepe Media
001 Pepe Horas
001 Pepe Media
002 Juan Horas
003 Luis Media
003 Luis Total
003 Luis Total

Lo que debo de hacer es borrar de la BBDD todos los registros duplicados, es
decir, en este ejemplo, tendría que eliminar 001 Pepe Media y 003 Luis
Total".

Muy amablemente Lirán Marino me sugirió lo siguiente:

SELECT DISTINCT Tabla1.Campo1, Tabla1.Campo2, Tabla1.Campo3
INTO nuevatabla
FROM Tabla1;

Mi problema es que si hago esto en la nueva tabla me inserta lo siguiente:

001 Total
001 Media
002 Horas
003 Media
003 Total

Y yo lo que necesito es que ademas de eliminarme los duplicados en la nueva
tabla se carguen los nuevos registros pero con todos los camops.

Perdonar por lo extenso del post, pero llevo todo un dia con esto y necesito
solucionarlo cuanto antes.

Muchas gracias

Marina Prada
 

Leer las respuestas

#1 Alejandro Mesa
10/06/2005 - 21:16 | Informe spam
Marina,

Puedes hacer lo siguiente, adiciona una columna tipo identity para poder
identificar unicamente cada fila en la tabla, luego ejecutas la sentencia
delete que adjunto y por ultimo eliminas la columna identity.

use northwind
go

create table t1 (
Codigo_cliente varchar(10) not null,
Nombre varchar(25) not null,
Tipo_Contrato varchar(25) not null,
)
go

insert into t1 values('001', 'Pepe', 'Total')
insert into t1 values('001', 'Pepe', 'Media')
insert into t1 values('001', 'Pepe', 'Horas')
insert into t1 values('001', 'Pepe', 'Media')
insert into t1 values('002', 'Juan', 'Horas')
insert into t1 values('003', 'Luis', 'Media')
insert into t1 values('003', 'Luis', 'Total')
insert into t1 values('003', 'Luis', 'Total')
go

alter table t1
add c1 int not null identity constraint u_c1 unique
go

delete t1
where exists(
select
*
from
t1 as a
where
a.Codigo_cliente = t1.Codigo_cliente
and a.Nombre = t1.Nombre
and a.Tipo_Contrato = t1.Tipo_Contrato
and a.c1 != t1.c1
)
go

alter table t1
drop constraint u_c1
go

alter table t1
drop column c1
go

select
*
from
t1
order by
Codigo_cliente,
Nombre,
Tipo_Contrato
go

drop table t1
go

Si la tabla tiene alguna columna que quieras usar para decidir que filas
borrar o dejar cuando existen duplicados, entonces te pido que postees la
definicion de la tabla asi como la logica para tomar la decision de fila se
borra y cual no.


AMB


"Marina Prada" wrote:

Hola,

Estoy haciendo un programa en VB6.0 y BBDD en Access o SQL, eso me daría
igual, y tengo un problema a la hora de realizar una filtracion de unos
campos duplicados de una consulta.
Me han ayudado mucho desde el grupo de Visual Basic pero todavía no consigo
hacer lo que quiero y me da un poco de apuro seguir con el mismo tema en ese
grupo entre otras cosas porque creo que puse un ejemplo confundido, asi que
os lo pregunto a vosotros a ver si alguien me puede ayudar. Os pongo el hilo
iniciado y perdonar si es muy largo:

Esta es un ejemplo de la tabla:

Codigo_cliente Nombre Tipo_Contrato

001 Pepe Total
001 Pepe Media
001 Pepe Horas
001 Pepe Media
002 Juan Horas
003 Luis Media
003 Luis Total
003 Luis Total

Lo que debo de hacer es borrar de la BBDD todos los registros duplicados, es
decir, en este ejemplo, tendría que eliminar 001 Pepe Media y 003 Luis
Total".

Muy amablemente Lirán Marino me sugirió lo siguiente:

SELECT DISTINCT Tabla1.Campo1, Tabla1.Campo2, Tabla1.Campo3
INTO nuevatabla
FROM Tabla1;

Mi problema es que si hago esto en la nueva tabla me inserta lo siguiente:

001 Total
001 Media
002 Horas
003 Media
003 Total

Y yo lo que necesito es que ademas de eliminarme los duplicados en la nueva
tabla se carguen los nuevos registros pero con todos los camops.

Perdonar por lo extenso del post, pero llevo todo un dia con esto y necesito
solucionarlo cuanto antes.

Muchas gracias

Marina Prada



Preguntas similares