Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Seleccionar registros de una tabla con count de un campo = 1 (https://www.clubdelphi.com/foros/showthread.php?t=88777)

apicito 29-07-2015 19:04:06

Seleccionar registros de una tabla con count de un campo = 1
 
Tengo una tabla de Habitantes que tiene un campo "codigo_domicilio" que hace referencia a una segunda tabla de Domicilios.
Trato de seleccionar todos los habitantes que viven solos, es decir aquellos registros con "codigo_domicilio" unico.
Aguien me puede guiar con esto?.
Saludos.

jhonny 29-07-2015 19:20:51

Segun como entendí el asunto, con la cláusula Having lo solucionarías:

Código SQL [-]
select Nombre, count(*) from Tabla_En_Cuestion Group By Nombre Having Count (*) = 1

apicito 29-07-2015 20:16:13

Gracias por la aportación.
He probado:
Código SQL [-]
select 
CODTIPODOC, CODIGODOC, LETRADOC, NOMBRE,  PARAPELLIDO1, APELLIDO1, PARAPELLIDO2, APELLIDO2, SEXO, HOJAPADRONAL, count(*)  
from PHABITANTES  Group By HOJAPADRONAL Having Count (*) = 1
y me da error de
Código:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).

Parece como si el "group by" solo pudiese seleccionar el campo de agrupación.

Casimiro Notevi 29-07-2015 20:23:02

Necesitas un tutorial de SQL ;)

Si miras el ejemplo de Jhonny, ha puesto el campo 'nombre' y luego en el group by ha puesto el campo 'nombre'.
Si tú pones otros campos, debes ponerlos también en el group by.

apicito 29-07-2015 20:40:51

Cita:

Empezado por Casimiro Notevi (Mensaje 495013)
Necesitas un tutorial de SQL ;)
Si miras el ejemplo de Jhonny, ha puesto el campo 'nombre' y luego en el group by ha puesto el campo 'nombre'.
Si tú pones otros campos, debes ponerlos también en el group by.

El problema es que si meto todos los campos en el group by seleccionara los que se diferencien por cualquier campo y no solo por el campo 'nombre', o en mi caso, 'HOJAPADRONAL' con lo que no filtrara los habitantes que esten solos en una hojapadronal o domicilio.
El SQL de jhony funciona correctamente, el fallo surge cuando trato de obtener más campos de la tabla.

Casimiro Notevi 29-07-2015 20:46:53

Es que el funcinamiento es ese.
Puedes traerte los códigos de clientes y luego con ellos traerte el resto de datos que necesites.

apicito 29-07-2015 20:58:50

Cita:

Empezado por Casimiro Notevi (Mensaje 495022)
Es que el funcinamiento es ese.
Puedes traerte los códigos de clientes y luego con ellos traerte el resto de datos que necesites.

Voy a hacer pruebas.

ecfisa 29-07-2015 22:13:26

Hola apicito.
Cita:

Empezado por apicito (Mensaje 495001)
Tengo una tabla de Habitantes que tiene un campo "codigo_domicilio" que hace referencia a una segunda tabla de Domicilios.
Trato de seleccionar todos los habitantes que viven solos, es decir aquellos registros con "codigo_domicilio" unico.
Aguien me puede guiar con esto?.
Saludos.

Si no te interpreté mal, creo que tu consulta sería:
Código SQL [-]
SELECT T1.CAMPO1, T1,CAMPO2, ...
FROM TABLA T1
WHERE T1.CODIGO_DOMICILIO IN (SELECT T2.CODIGO_DOMICILIO 
                              FROM TABLA T2 GROUP BY(T2.CODIGO_DOMICILIO) 
                              HAVING COUNT(T2.CODIGO_DOMICILIO) = 1)
El problema que veo, es que la consulta podría resultar extremadamente pesada si existen muchas filas...

Saludos :)

apicito 31-07-2015 18:30:14

Gracias a todos.
La solución de ecfisa me ha funcionado correctamente.
Es una consulta pesada, pero se realiza pocas veces.
Un saludo.


La franja horaria es GMT +2. Ahora son las 18:43:37.

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