Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > SQL Server

Respuesta
 
Herramientas Desplegado
Antiguo 26-may-2008, 10:13   #1 (permalink)
TonoBerenjena ha deshabilitado el karma
 
Fecha de Ingreso: mayo-2008
Mensajes: 2
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] [cingles@cingels.com ]
112 [SIC ] [C/ Vifre, 1 ] [sic@telefonica.com ]
132 [SIC S.A. ] [Calle Vifre, 1 ] [sic@telefonica.com ]
213 [METRASONI ] [Duero, 13 ] [metrasoni@telefonica.com]
324 [METRASONI SL ] [C/Duero, 1 ] [metrasoni@telefonica.com]
515 [METRASONI S.L.] [Duero - 13 ] [metrasoni@telefonica.com]

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] [cingles@cingels.com
112 [SIC] [C/ Vifre, 1] [sic@telefonica.com
213 [METRASONI] [Duero, 13] [metrasoni@telefonica.com]

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.
TonoBerenjena está desconectado   Responder Citando
Antiguo 26-may-2008, 15:21   #2 (permalink)
Elias_Enki ha deshabilitado el karma
 
Fecha de Ingreso: marzo-2008
Mensajes: 3
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] [cingles@cingels.com ]
112 [SIC ] [C/ Vifre, 1 ] [sic@telefonica.com ]
132 [SIC S.A. ] [Calle Vifre, 1 ] [sic@telefonica.com ]
213 [METRASONI ] [Duero, 13 ] [metrasoni@telefonica.com]
324 [METRASONI SL ] [C/Duero, 1 ] [metrasoni@telefonica.com]
515 [METRASONI S.L.] [Duero - 13 ] [metrasoni@telefonica.com

Sería duplicidad si estuviera así:

213 [METRASONI ] [Duero, 13 ] [metrasoni@telefonica.com]
324 [METRASONI ] [C/Duero, 1 ] [metrasoni@telefonica.com]

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
Elias_Enki está desconectado   Responder Citando
Antiguo 29-may-2008, 13:47   #3 (permalink)
TonoBerenjena ha deshabilitado el karma
 
Fecha de Ingreso: mayo-2008
Mensajes: 2
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 ] [metrasoni@telefonica.com]
324 [METRASONI SL ] [C/Duero, 1 ] [metrasoni@telefonica.com]

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
TonoBerenjena está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 22:56.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93