Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-05-2015
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.485
Poder: 20
MAXIUM Va camino a la fama
Agrupar por nombres y apellidos iguales

Saludos.

Siempre me sorprende la flexibilidad de este lenguaje para hacer consultas. Pero la siguiente no se que factible sea.

El asunto es el siguiente. Tengo una tabla con nombres y apellidos. Y lo que tengo que buscar, es aquellos que tengan el mismo apellido paterno y nombre.

Un ejemplo de esto: el abuelo se llama Juan, al igual que su hijo y su nieto. ¿Como por puedo filtrar la tabla para encontrarlos?
Responder Con Cita
  #2  
Antiguo 12-05-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que no se entiende lo que preguntas, pero si buscas a todos los que se llamen de nombre 'juan' y de apellido 'smith' tendrás que hacer:
Código SQL [-]
select * from tbPersonas where nombre='juan' and apellido='smith'
Responder Con Cita
  #3  
Antiguo 12-05-2015
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.485
Poder: 20
MAXIUM Va camino a la fama
Eso sería facil, pero no se ni el nombre, ni apellido.

Tendría que ser algo como ordenar por nombre y apellido paterno, descartar a aquellos que sean únicos en aquel ordenamiento.
Responder Con Cita
  #4  
Antiguo 12-05-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Sigo sin entender, ¿entonces qué dato conoces y qué dato necesitas?
Responder Con Cita
  #5  
Antiguo 13-05-2015
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.485
Poder: 20
MAXIUM Va camino a la fama
Data
Código:
LOPEZ PEREZ JUAN
LOPEZ MARDONES LUISA
LOPEZ MANRIQUEZ JUAN
LOPEZ LOPEZ ESTEBAN
MALUENDA GONZALEZ FRANCISCA
MALUENDA DE LA JARA ANA
MALUENDA MERCEDEZ FRANCISCA
MALUENDA TORROJA HERNESTO
MALUENDA TAPIA FRANCISCA
Resultado de la consulta
Código:
LOPEZ PEREZ JUAN
LOPEZ MANRIQUEZ JUAN

MALUENDA GONZALEZ FRANCISCA
MALUENDA MERCEDEZ FRANCISCA
MALUENDA TAPIA FRANCISCA
La idea es formar grupos donde tanto el nombre y apellido paterno coincidan en toda la tabla. Sin especificar el nombre ni apellido, sino que filtrar toda la tabla cuando se encuentre un nombre que se repite al igual que su apellido
Responder Con Cita
  #6  
Antiguo 13-05-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola MAXIUM.

Un modo es:
Código SQL [-]
SELECT APEL_PATER, APEL_MATER, NOMBRE
FROM TU_TABLA
WHERE APEL_PATER IN (SELECT APEL_PATER FROM TU_TABLA
      GROUP BY APEL_PATER HAVING COUNT(*) > 1 )
  AND NOMBRE IN (SELECT NOMBRE FROM TU_TABLA
      GROUP BY NOMBRE HAVING COUNT(*) > 1 )
ORDER BY APEL_PATER

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 13-05-2015
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.485
Poder: 20
MAXIUM Va camino a la fama
Cita:
Empezado por ecfisa Ver Mensaje
Hola MAXIUM.

Un modo es:
Código SQL [-]
SELECT APEL_PATER, APEL_MATER, NOMBRE
FROM TU_TABLA
WHERE APEL_PATER IN (SELECT APEL_PATER FROM TU_TABLA
      GROUP BY APEL_PATER HAVING COUNT(*) > 1 )
  AND NOMBRE IN (SELECT NOMBRE FROM TU_TABLA
      GROUP BY NOMBRE HAVING COUNT(*) > 1 )
ORDER BY APEL_PATER

Saludos
Casi...

Responder Con Cita
  #8  
Antiguo 13-05-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola MAXIUM.

Tenes razón, probé con los datos del mensaje #5, funcionaba bién y pensé que lo tenía. Pero agregando otros datos noté, que debido a la conjunción del WHERE, agrega nombres que no debería.
Está complicado el asunto desde una consulta... tal vez tengas que usar un procedimiento almacenado.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 13-05-2015
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.408
Poder: 22
fjcg02 Va camino a la fama
Esto es muuuuuy sucio, pero funciona, casi seguro. No lo he probado.
Miras y nos cuentas...

Saludos

Código SQL [-]
SELECT AA.APEL_PATER, AA.APEL_MATER, AA.NOMBRE
FROM  TU_TABLA
inner join (SELECT APEL_PATER, NOMBRE, COUNT(1) FROM  TU_TABLA
      GROUP BY APEL_PATER, NOMBRE 
      HAVING COUNT(1) > 1 
) AA ON ( APEL_PATER= AA.APEL_PATER AND NOMBRE=AA.NOMBRE)
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #10  
Antiguo 13-05-2015
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.408
Poder: 22
fjcg02 Va camino a la fama
Otra opción es tal y como te hemos comentado antes, hacer un procedimiento almacenado, o una vista con los que se repiten para cruzarla con tu tabla.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #11  
Antiguo 13-05-2015
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.408
Poder: 22
fjcg02 Va camino a la fama
Cita:
Empezado por fjcg02 Ver Mensaje
Esto es muuuuuy sucio, pero funciona, casi seguro. No lo he probado.
Miras y nos cuentas...

Saludos

Código SQL [-]
SELECT APEL_PATER, APEL_MATER, NOMBRE
FROM  TU_TABLA
inner join (SELECT APEL_PATER, NOMBRE, COUNT(1) FROM  TU_TABLA
      GROUP BY APEL_PATER, NOMBRE 
      HAVING COUNT(1) > 1 
) AA ON ( APEL_PATER= AA.APEL_PATER AND NOMBRE=AA.NOMBRE)
Estaban mal los tres campos que devuelve la consulta... los he corregido.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #12  
Antiguo 13-05-2015
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
Cita:
Empezado por ecfisa Ver Mensaje
Un modo es:
Código SQL [-]
SELECT APEL_PATER, APEL_MATER, NOMBRE
FROM TU_TABLA
WHERE APEL_PATER IN (SELECT APEL_PATER FROM TU_TABLA
      GROUP BY APEL_PATER HAVING COUNT(*) > 1 )
  AND NOMBRE IN (SELECT NOMBRE FROM TU_TABLA
      GROUP BY NOMBRE HAVING COUNT(*) > 1 )
ORDER BY APEL_PATER
La idea de Ecfisa deberia de funcionar con la variación de unir los campos de apellido_paterno y nombre en la misma consulta. Esto ya dependiendo del motor de bases de datos se podrá hacer de una forma u otra:

Para MSSQL es:

Código SQL [-]
SELECT APEL_PATER, APEL_MATER, NOMBRE
FROM TU_TABLA
WHERE APEL_PATER+NOMBRE  IN (SELECT APEL_PATER+NOMBRE  FROM TU_TABLA
      GROUP BY APEL_PATER+NOMBRE HAVING COUNT(*) > 1 )
ORDER BY APEL_PATER

Y para MySQL es:
Código SQL [-]
SELECT APEL_PATER, APEL_MATER, NOMBRE
FROM TU_TABLA
WHERE (APEL_PATER, NOMBRE)  IN (SELECT APEL_PATER, NOMBRE  FROM TU_TABLA
      GROUP BY APEL_PATER, NOMBRE HAVING COUNT(*) > 1 )
ORDER BY APEL_PATER

Un Saludo
Responder Con Cita
  #13  
Antiguo 13-05-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Si, definitivamente bucanero dió en el blanco con la concatenación.

En Firebird:
Código SQL [-]
SELECT APEL_PATER || ' ' || NOMBRE
FROM TU_TABLA
WHERE APEL_PATER || ' ' || NOMBRE  IN (SELECT APEL_PATER || ' ' || NOMBRE  FROM TU_TABLA
      GROUP BY 1 HAVING COUNT(*) > 1 )
ORDER BY 1

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 17-05-2015 a las 20:55:25.
Responder Con Cita
  #14  
Antiguo 17-05-2015
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.485
Poder: 20
MAXIUM Va camino a la fama
Como dije, es sorprendente SQL. Pero es nada sin alguien que tenga la habilidad de usarlo.

Muchisimas gracias todos.

Última edición por MAXIUM fecha: 17-05-2015 a las 18:36:52.
Responder Con Cita
  #15  
Antiguo 17-05-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por MAXIUM Ver Mensaje
Como dije, es sorprendente SQL. Pero es nada sin alguien que tenga la habilidad de usarlo.
Bueno, eso pasa con casi todo
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Nombres de atributos de clase y nombres de propiedades noob OOP 6 29-10-2012 17:05:30
Unificar nombres y apellidos dtomeysoto Varios 5 13-07-2010 19:10:13
Cuidado con los apellidos. marcoszorrilla La Taberna 39 11-07-2007 01:03:17
ordernar nombres y evitar nombres repetidos en DBLookupComboBox @-Soft Conexión con bases de datos 4 14-01-2004 17:30:51
Controlar que no se introduzcan nombres iguales en un campo fortran Tablas planas 6 19-08-2003 19:05:49


La franja horaria es GMT +2. Ahora son las 06:33:18.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi