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

Preguntas similare

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



Respuesta Responder a este mensaje
#2 Marina Prada
10/06/2005 - 21:32 | Informe spam
Hola Alejandro, muchismas gracias por tu rapida respuesta y decirte que soy
un poco novata en este tema,

Unas cosas sobre lo que me sugieres:

1º Donde tendría que colocar ese código en mi programa VB6.0, tendría que
colocarlo tal cual pero adaptado a mi BBDD?

2º El total de registros es de 20.000 , tendría que ir ahciendo el Insert
que me pones registro por registro?

La tabla no tiene ninguna columna por la que decidir cual borrar,
simplemente necesito quedarme con 1 solo de los registros duplicados.

Muchas gracias por tu rapida ayuda.

Saludos

Marina Prada

"Alejandro Mesa" escribió en el
mensaje news:
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
>
>
>
Respuesta Responder a este mensaje
#3 Alejandro Mesa
10/06/2005 - 21:45 | Informe spam
Marina,

Ese codigo es un ejemplo de lo que debes hacer. Debe correrse en SQL Query
Analyzer u otra herramienta que permita hacer queries "ad hoc" hacia una base
de datos sql server. Este codigo no trabajara en access, pues la definicion
de una columna autonumerica es diferente. Los inserts son ejemplos para
llenar mi tabla y probar que la solucion trabaja. Una vez que estes en SQL
Query Analyzer, este es el codigo a correr:

use nombre_de_tu_bd
go

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

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

alter table nombre_de_la_tabla_en_question
drop constraint u_c1
go

alter table nombre_de_la_tabla_en_question
drop column c1
go



AMB


"Marina Prada" wrote:

Hola Alejandro, muchismas gracias por tu rapida respuesta y decirte que soy
un poco novata en este tema,

Unas cosas sobre lo que me sugieres:

1º Donde tendría que colocar ese código en mi programa VB6.0, tendría que
colocarlo tal cual pero adaptado a mi BBDD?

2º El total de registros es de 20.000 , tendría que ir ahciendo el Insert
que me pones registro por registro?

La tabla no tiene ninguna columna por la que decidir cual borrar,
simplemente necesito quedarme con 1 solo de los registros duplicados.

Muchas gracias por tu rapida ayuda.

Saludos

Marina Prada

"Alejandro Mesa" escribió en el
mensaje news:
> 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
> >
> >
> >



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