Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Lista de registros unicos (varios campos) a partir de un solo campo con duplicidades

Estas en el tema de Lista de registros unicos (varios campos) a partir de un solo campo con duplicidades en el foro de SQL Server en Foros del Web. Hola: Tengo un problema al que le he dado muchas vueltas y no he sido capaz de resolver. Utilizo una tabla, denominada CLIENTES, con datos ...
  #1 (permalink)  
Antiguo 26/05/2008, 10:13
 
Fecha de Ingreso: mayo-2008
Mensajes: 2
Antigüedad: 16 años
Puntos: 0
Lista de registros unicos (varios campos) a partir de un solo campo con duplicidades

Hola:
Tengo un problema al que le he dado muchas vueltas y no he sido capaz de resolver.

Utilizo una tabla, denominada CLIENTES, con datos de empresas (ID, Empresa, Direccion, correoElectronico, etc. )
Me he dado cuenta que en la base de datos aparecen duplicidades del tipo:

ID Empresa Direccion CorreoElectronico
001 [El Corte Ingles ] [Plza.Cataluña, 1] [[email protected] ]
112 [SIC ] [C/ Vifre, 1 ] [[email protected] ]
132 [SIC S.A. ] [Calle Vifre, 1 ] [[email protected] ]
213 [METRASONI ] [Duero, 13 ] [[email protected]]
324 [METRASONI SL ] [C/Duero, 1 ] [[email protected]]
515 [METRASONI S.L.] [Duero - 13 ] [[email protected]]

Los registros duplicados serían el ID=112 e ID =132, por una lado y los ID=213, ID=324 e ID=515 por otro.

Necesito tener una lista de las empresas (Nombre, Direccion y correo electrónico) sin duplicidades (independientemente de si el nombre y la direccion coincide o no y considerando el campo de CorreoElectronico como campo de decisión para las duplicidades).
El resultado de los seis registros anteriores una vez efectuada la selección debería quedar:

ID Empresa Direccion CorreoElectronico
001 [El Corte Ingles] [Plza.Cataluña, 1] [[email protected]
112 [SIC] [C/ Vifre, 1] [[email protected]
213 [METRASONI] [Duero, 13] [[email protected]]

O sea, el segundo registro y siguientes (duplicados) ya no deberían aparecer en la salida

Como el nombre de la empresa y la direccion, de los registros duplicados, no son exactamente iguales NO los puedo utilizar con

SELECT DISTINCT CorreoElectronico, Empressa FROM CLIENTES.

Tampoco puedo utilizar

SELECT CorreoElectronico FROM CLIENTES GROUP BY CorreoElectronico.

ya que solo obtendría la lista de los correos electronicos no duplicados, pero no sabría a que empresa pertenecen.

Si utilizo la subconsulta del tipo

SELECT CorreoElectronico, Empresa, Direccion FROM CLIENTES
WHERE CorreoElectronico IN
(SELECT CorreoElectronico FROM CLIENTES
Group By CorreoElectronico
Having count(*) >1)
ORDER BY CorreoElectronico

optengo todos los registros duplicados, una sola vez tal como deseo, pero no tengo el resto de registros que no están duplicados.


Hay alguien que pueda decirme como solventar este problema

Esperando vuestras respuestas, recibid mi agredecimiento de antemano.
  #2 (permalink)  
Antiguo 26/05/2008, 15:21
 
Fecha de Ingreso: marzo-2008
Mensajes: 3
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Lista de registros unicos (varios campos) a partir de un solo campo con du

mira, en realidad no hay duplicidad, ya que si la llave primaria es el ID, no se repiten y el nombre de la empresa tampoco, todos los nombres son diferentes,

ID Empresa Direccion CorreoElectronico
001 [El Corte Ingles ] [Plza.Cataluña, 1] [[email protected] ]
112 [SIC ] [C/ Vifre, 1 ] [[email protected] ]
132 [SIC S.A. ] [Calle Vifre, 1 ] [[email protected] ]
213 [METRASONI ] [Duero, 13 ] [[email protected]]
324 [METRASONI SL ] [C/Duero, 1 ] [[email protected]]
515 [METRASONI S.L.] [Duero - 13 ] [[email protected]

Sería duplicidad si estuviera así:

213 [METRASONI ] [Duero, 13 ] [[email protected]]
324 [METRASONI ] [C/Duero, 1 ] [[email protected]]

y para que esto no sea permitido por el MDB, tendrias que poner como llaves primarias al ID y NOMBRE DE LA EMPRESA.
---------------------------------------------------------------------------------------------
creo que para insertar correctamente debes crear un nombre único de la empresa para no dañar la integridad de tu tabla.

De lo contrario con el ID de la empresa serviria para diferenciarlas
--------------------------------------------------------------------------------------------------------
otra opcion es separar las empresas de los clientes, y anular la relacion de muchos a muchos, porque creo que
*una empresa "tiene" de 1 a N clientes y
*un cliente "es" de 1 a N empresas.
-----------------------------------------------------------------------------------------------
espero haberte ayudado en ves de confundirte más!!
saludos
  #3 (permalink)  
Antiguo 29/05/2008, 13:47
 
Fecha de Ingreso: mayo-2008
Mensajes: 2
Antigüedad: 16 años
Puntos: 0
Respuesta: Lista de registros unicos (varios campos) a partir de un solo campo con du

Gracias Elias_Enki por contestar

Estoy totalmente de acuerdo contigo, en que se deben crear claves primarias para reducir las duplicidades, pero no las puedo crear hasta que no corrija la base actual.

Correjir la base de forma manual es bastante costoso, ya que tiene un número de registros considerables.

Precisamente el problema que tengo es que en la base, tecnicamente, no hay duplicidades, pero SI QUE EXISTEN desde un punto de visto practico

Lo que intento es quitar las duplicidades prácticas para dejar una base sin duplicidades, ni prácticas ni técnicas

Una duplicidad práctica para mi, es por ejemplo:

213 [METRASONI ] [Duero, 1 ] [[email protected]]
324 [METRASONI SL ] [C/Duero, 1 ] [[email protected]]

Aunque tal como dices, técnicamente, son diferentes, se trata de la misma empresa pero con los datos entrados de forma diferente.

La única clave que me permite saber que estos registros están duplicados es el correo electrónico (es el mismo en los dos casos) y por tanto con quedarme con un solo registro (cualquiera de los dos) sería suficiente para mi, ya que he comprobado que este campo es correcto en todos los casos

gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:48.