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)
-   -   Consulta filtrada (https://www.clubdelphi.com/foros/showthread.php?t=66281)

ecfisa 11-02-2010 05:54:40

Consulta filtrada
 
Hola, tengo problemas al querer filtrar una consulta en Firebird. La tabla, simplificada a lo relevante, queda así:
CREATE TABLE TBL(
COD1 CHAR(2) NOT NULL,
COD2 CHAR(3) NOT NULL,
REG_ID INTEGER NOT NULL, /* autoincremental */
CONSTRAINT TBL_PK PRIMARY KEY(COD1, COD2)
);
Los valores de COD1 y COD2 pueden estar repetidos, siempre que no lo hagan respectivamente en dos registros diferentes (puesto que provocarían una excepción, logicamente).
Como quiero que COD1 aparezca sólo una vez, utilizo: SELECT DISTINCT COD1 FROM TBL, pero esto no me permite obtener otro campo.
Infiero que cuando trato con: SELECT DISTINCT COD1, TBL_ID FROM TBL (por ejemplo), que DISTINCT afecta también a TBL_ID y al ser estos todos diferentes, aparecen consecuentemente COD1 repetidos.
Quizá no es posible esta consulta y deba reestructurar.
He buscado varios días en múltiples ejemplos pero no doy con la solución, agradezco su atención y cualquier sugerencia.


Saludos cordiales al foro.

guillotmarc 11-02-2010 10:02:44

Hola, no sé seguir tu explicación.

Quizás sería más rápido que nos pusieras un ejemplo. Muestra cuatro o cinco registros que pudiera haber en la tabla, y enseñanos que resultado te gustaría que sacara tu consulta a partir de ellos.

Saludos.

ecfisa 11-02-2010 14:12:43

Gracias por tu respuesta Guillotmarc, a ver si puedo ejemplificar.

Datos en tabla:
COD1| COD2| REG_ID
01 | 001 | 1
01 | 002 | 2
02 | 001 | 3
03 | 001 | 4
01 | 003 | 5
...

Salida que busco:
COD1 | REG_ID
01 | 1
02 | 3
03 | 4

De nuevo muchas gracias.

Caro 11-02-2010 14:49:15

Cita:

Empezado por ecfisa (Mensaje 353661)
Gracias por tu respuesta Guillotmarc, a ver si puedo ejemplificar.

Datos en tabla:
COD1| COD2| REG_ID
01 | 001 | 1
01 | 002 | 2
02 | 001 | 3
03 | 001 | 4
01 | 003 | 5
...

Salida que busco:
COD1 | REG_ID
01 | 1
02 | 3
03 | 4

De nuevo muchas gracias.

Hola ecfisa, según tu ejemplo la consulta debería ser :

Código SQL [-]
Select COD1, REG_ID From Tabla Where COD2='001'

pero creo que te falta explicar algo mas.

Saluditos

ecfisa 11-02-2010 15:19:10

Hola Caro, primero gracias.

Tu ejemplo y funcionaría perfectamente si los valores de COD2 para cada COD1 comenzasen necesariamente con '001', pero son asignados sin restricciones de 0 a 999; y si se diera el caso COD1: O1 | COD2: 035 la consulta no lo mostraría.

Perdón, no me di cuenta que omiti esto en el primer post.

Caro 11-02-2010 16:22:23

Hola de nuevo ecfisa, creo que ya te he entendido :rolleyes:, la consulta creo que sería esta:

Código SQL [-]
SELECT DISTINCT C1.COD1, (Select First 1 C2.ID From TBL C2 Where C1.COD1=C2.COD1)
FROM TBL C1

Si no es eso, debes seguirnos explicando.

Saluditos

ecfisa 11-02-2010 20:26:52

Ahora sí Caro, indudablemente es esa la consulta acertada!

Muchas gracias por tu ayuda. ;)


La franja horaria es GMT +2. Ahora son las 05:29:25.

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