Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > SQL
Register FAQ Members List Calendar Guía de estilo Search Today's Posts Mark Forums Read

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 12/05/2015
MAXIUM's Avatar
MAXIUM MAXIUM is offline
Miembro
 
Join Date: May 2005
Posts: 1,503
Poder: 23
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?
Reply With Quote
  #2  
Old 12/05/2015
Casimiro Noteví's Avatar
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Join Date: Sep 2004
Location: En algún lugar.
Posts: 32,682
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví 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'
Reply With Quote
  #3  
Old 12/05/2015
MAXIUM's Avatar
MAXIUM MAXIUM is offline
Miembro
 
Join Date: May 2005
Posts: 1,503
Poder: 23
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.
Reply With Quote
  #4  
Old 12/05/2015
Casimiro Noteví's Avatar
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Join Date: Sep 2004
Location: En algún lugar.
Posts: 32,682
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Sigo sin entender, ¿entonces qué dato conoces y qué dato necesitas?
Reply With Quote
  #5  
Old 12/05/2015
MAXIUM's Avatar
MAXIUM MAXIUM is offline
Miembro
 
Join Date: May 2005
Posts: 1,503
Poder: 23
MAXIUM Va camino a la fama
Data
Code:
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
Code:
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
Reply With Quote
  #6  
Old 13/05/2015
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
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 ....
Reply With Quote
  #7  
Old 13/05/2015
MAXIUM's Avatar
MAXIUM MAXIUM is offline
Miembro
 
Join Date: May 2005
Posts: 1,503
Poder: 23
MAXIUM Va camino a la fama
Quote:
Originally Posted by ecfisa View Post
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...

Reply With Quote
  #8  
Old 13/05/2015
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
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 ....
Reply With Quote
  #9  
Old 13/05/2015
fjcg02's Avatar
[fjcg02] fjcg02 is offline
Miembro Premium
 
Join Date: Dec 2003
Location: Zamudio
Posts: 1,418
Poder: 24
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 -
Reply With Quote
  #10  
Old 13/05/2015
fjcg02's Avatar
[fjcg02] fjcg02 is offline
Miembro Premium
 
Join Date: Dec 2003
Location: Zamudio
Posts: 1,418
Poder: 24
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 -
Reply With Quote
  #11  
Old 13/05/2015
fjcg02's Avatar
[fjcg02] fjcg02 is offline
Miembro Premium
 
Join Date: Dec 2003
Location: Zamudio
Posts: 1,418
Poder: 24
fjcg02 Va camino a la fama
Quote:
Originally Posted by fjcg02 View Post
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 -
Reply With Quote
  #12  
Old 13/05/2015
bucanero bucanero is offline
Miembro
 
Join Date: Nov 2013
Location: Almería, España
Posts: 208
Poder: 13
bucanero Va camino a la fama
Quote:
Originally Posted by ecfisa View Post
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
Reply With Quote
  #13  
Old 13/05/2015
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
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 ....

Last edited by ecfisa : 17/05/2015 at 19:55.
Reply With Quote
  #14  
Old 17/05/2015
MAXIUM's Avatar
MAXIUM MAXIUM is offline
Miembro
 
Join Date: May 2005
Posts: 1,503
Poder: 23
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.

Last edited by MAXIUM : 17/05/2015 at 17:36.
Reply With Quote
  #15  
Old 17/05/2015
Casimiro Noteví's Avatar
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Join Date: Sep 2004
Location: En algún lugar.
Posts: 32,682
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Quote:
Originally Posted by MAXIUM View Post
Como dije, es sorprendente SQL. Pero es nada sin alguien que tenga la habilidad de usarlo.
Bueno, eso pasa con casi todo
Reply With Quote
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Nombres de atributos de clase y nombres de propiedades noob OOP 6 29/10/2012 16:05
Unificar nombres y apellidos dtomeysoto Varios 5 13/07/2010 18:10
Cuidado con los apellidos. marcoszorrilla La Taberna 39 11/07/2007 00:03
ordernar nombres y evitar nombres repetidos en DBLookupComboBox @-Soft Conexión con bases de datos 4 14/01/2004 16:30
Controlar que no se introduzcan nombres iguales en un campo fortran Tablas planas 6 19/08/2003 18:05


All times are GMT +2. The time now is 03:28.


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