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)
-   -   Solo mostrar un registro en tabla maestra (https://www.clubdelphi.com/foros/showthread.php?t=87173)

Luis M. 24-11-2014 09:05:39

Solo mostrar un registro en tabla maestra
 
Hola.
Necesito sacar de una consulta, todos los registros de la tabla maestra que en la tabla detalle cumpla unas condiciones.
Pero solo necesito que se muestre un registro de esta tabla maestra.
Trabajo con firebird 2.5


Tengo esta consulta:
cencargos->Tabla maestra de los encargos.
encargos->Tabla detalle con los artículos.
En la tabla encargos puede haber varios artículos de un encargo que cumplan con la condición, por eso me muestra los registros duplicados.

Código SQL [-]
select
    cencargos.numero,
    cencargos.nombre_cliente,
    encargos.descripcion,
    encargos.familia,
    cencargos.f_evento
    from cencargos
   inner join encargos on (cencargos.numero = encargos.numero)
where
   (
      (cencargos.cerrado = 'N')
   and 
      (encargos.gestion_taller = 'SI')
   and 
      (encargos.f_entregado is null )
   )
order by cencargos.numero

Esta consulta me devuelve algunos registros con el mismo número de encargo y solo quiero que se muestre uno de ellos.

Gracias por vuestra ayuda.
Un saludo.

duilioisola 24-11-2014 10:25:56

Puedes utilizar DISTINCT

Código SQL [-]
select DISTINCT
    cencargos.numero,
    cencargos.nombre_cliente,
    encargos.descripcion,
    encargos.familia,
    cencargos.f_evento
    from cencargos
   inner join encargos on (cencargos.numero = encargos.numero)
where
   (
      (cencargos.cerrado = 'N')
   and 
      (encargos.gestion_taller = 'SI')
   and 
      (encargos.f_entregado is null )
   )
order by cencargos.numero

otra opción es hacer una subconsulta:

Código SQL [-]
select 
    cencargos.numero,
    cencargos.nombre_cliente,
    encargos.descripcion,
    encargos.familia,
    cencargos.f_evento
    from cencargos
where
(
   (cencargos.cerrado = 'N')
and 
   cencargos.numero in 
   (
      select numero from encargos 
      where
         (
            (encargos.gestion_taller = 'SI')
         and 
            (encargos.f_entregado is null )
         )
   )
)
order by cencargos.numero

Luis M. 24-11-2014 12:34:44

1 Archivos Adjunto(s)
Hola.
Gracias por responder.
Ya había probado con DISTINCT pero en este caso no sirve porque DISTINCT actúa sobre todos campos.
La subconsulta tampoco funciona.
En el select intervienen campos de las dos tablas.
Adjunto imagen ( a ver si se ve bien)

fjcg02 24-11-2014 20:56:04

Hola,
es un poco raro lo que pides, porque si quieres ver sólo datos de encargos, no sé porqué incluyes datos de los artículos, pero bueno.

Si quieres hacer eso, tendrás que decidir qué artículo quieres mostrar de cada encargo, el primero, el último o lo que quieras.

Para eso, debes agrupar la consulta.

Código SQL [-]
select
    cencargos.numero,
    cencargos.nombre_cliente,
    first(encargos.descripcion),
    first(encargos.familia),
    first(cencargos.f_evento)
    from cencargos
   inner join encargos on (cencargos.numero = encargos.numero)
where
   (
      (cencargos.cerrado = 'N')
   and 
      (encargos.gestion_taller = 'SI')
   and 
      (encargos.f_entregado is null )
   )
order by cencargos.numero
group by 
    cencargos.numero,
    cencargos.nombre_cliente
Yo he decidido poner el primer artículo, porque supongo ( mucho suponer) que quieres lo primero que esté pendiente de cada encargo. Ahora, que del encargo 00020 quieras mostrar la jaqueteta o el vestit..

Aunque no veo yo que tenga mucho sentido lo que te propones...

Espero que te ayude.

Saludos

Luis M. 25-11-2014 00:13:08

Gracias por responder, pero tampoco me sirvió.
Aunque los agrupe, me siguen saliendo repetidos los números de encargo.
Voy a intentar otras alternativas.
Otra cuestión...
Como sería la consulta para que en la tabla de artículos solo me saliesen
un artículo por encargo?
Un saludo.

Casimiro Notevi 25-11-2014 00:23:28

El problema es que no está claro lo que quieres.


La franja horaria es GMT +2. Ahora son las 18:45:19.

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