AYUDA CON UNA CONSULTITA SQL

Iniciado por John_Salchichon, 13 Junio 2011, 04:42 AM

0 Miembros y 1 Visitante están viendo este tema.

John_Salchichon

El tema es asi, para cada "proveedor" mostrar sus datos (todos) y la menor entrega hecha de componentes de cada uno de ellos.

Las tablas son:

Proveedores (codProv, nomProv, dirProv, telProv)
Prov-Gen-Comp (codProv, codGen, numSerComp, fecha, cant)

de donde la cantidad de componentes entregados es la columna "cant" de la tabla Prov-Gen-Comp

entonces lo que hice fue:

SELECT P.*, PGC.cant
     FROM PROVEEDORES P, PROV_GEN_COMP PGC
     WHERE P.codprov = PGC.codprov
     AND PGC.cant = (SELECT MIN (PGC.cant)
                     FROM PROV_GEN_COMP);

como no me dejo hacerle un MIN en la primer linea sin ponerle al final un group by, me decidi a hacer una subconsulta por probar y si me deja sin problemas, pero ahora el tema es que me lista TODOS los proveedores, por ejemplo lo que me esta  devolviendo la consulta asi como esta  es:
CODPROV                NOMPROV                        DIRPROV                        TELPROV                        CANT                  
---------------------- ------------------------------ ------------------------------ ------------------------------ ----------------------
3                      Cuqui Lacalle                  Av.Italia 1223                 225321                         2                      
12                     Horacio Peralta                Mariano Uriarte 8754           2623145                        4                      
4                      Tanque Silva                   Jackson 5523                   24112365                       5                      
8                      Pato Sosa                      Yi esq. 18 de julio            2745232                        6                      
5                      Sebastian Viera                Cerro Largo 1524               2147823                        7                      
3                      Cuqui Lacalle                  Av.Italia 1223                 225321                         8                      

6 filas seleccionadas


cuando solo deberia mostrar una sola vez Cuqui Lacalle con la menor entrega, o sea 3 junto con los demas... o sea tendrian q aparecer todos esos menos cuqui lacalle con 8 entregas.. no se si se entiende..

alguna idea de como solucionar esto o pista a ver en que le estoy errando?

Gracias!



VCore

#1
No termino de entender que es lo que querés proyectar.

En español la consulta sería:
"Dame la información del proveedor que tiene menos entregas hechas, agregándole el número de componentes entregados"
o
"Dame la información de todos los proveedores, agregando el número de componentes entregados"
?

De última pega el resultado que queres ver con tu consulta, onda:

CODPROV                NOMPROV                        DIRPROV                        TELPROV                        CANT                 
---------------------- ------------------------------ ------------------------------ ------------------------------ ----------------------
3                      Cuqui Lacalle                  Av.Italia 1223                 225321                         2                     


John_Salchichon

#2
es asi:

Para cada proveedor mostrar sus datos y la menor entrega hecha de componentes de cada uno de ellos.

y deberia retornar:

---------------------- ------------------------------ ------------------------------ ------------------------------ ----------------------
3                      Cuqui Lacalle                  Av.Italia 1223                 225321                         2                     
12                     Horacio Peralta                Mariano Uriarte 8754           2623145                        4                     
4                      Tanque Silva                   Jackson 5523                   24112365                       5                     
8                      Pato Sosa                      Yi esq. 18 de julio            2745232                        6                     
5                      Sebastian Viera                Cerro Largo 1524               2147823                        7           

bomba1990

creo que por lo que has dicho con un group by y un min, puedes hacer lo que quieres, agrupas todos para que te salgan una sola ves, y un min te sale el que menos trae, porque no quieres hacer un group by?
"Cuando le di de comer a los pobres me llamaron santo, pero cuando pregunte porque los pobres eran pobres me dijeron comunista"

http://sosinformatico.blogspot.com/
http://www.publisnet.com.ve

John_Salchichon

Donde iria el group by? es que nunca lo use mucho aun, lo puse en la consulta y me tiro error

John_Salchichon

listo ya lo solucione con el group by:

SELECT P.CODPROV, P.DIRPROV, P.NOMPROV, P.TELPROV, MIN(PGC.cant)
      FROM PROVEEDORES P, PROV_GEN_COMP PGC
      WHERE P.codprov = PGC.codprov
      GROUP BY P.CODPROV, P.DIRPROV, P.NOMPROV, P.TELPROV;


estaba tratando de hacer group by con P.* y me daba error, habia que escribir todos los campos, ese era el problema.. muchas gracias!

bomba1990

supongo que con poner solamente groupby codprov pues suficiente, porque si por cosa de la vida dos empresas diferentes tienen el mismo direccion o nombre o x, pues te va a acausar un pequeño problema, el groupby solo al cod va a ser mas que suficiente, ademas pones al motor a trabajar menos.
"Cuando le di de comer a los pobres me llamaron santo, pero cuando pregunte porque los pobres eran pobres me dijeron comunista"

http://sosinformatico.blogspot.com/
http://www.publisnet.com.ve

John_Salchichon

probe con agruparlo solo con codprov como decis pero el oracle me larga un error, cuando los pongo a todos no... sera que funciona asi oracle?