Consulta complicada

13/11/2004 - 16:35 por Antonio Ortiz | Informe spam
Tengo 3 tablas
1) Productos: IDProducto, codigo, Descripcion
2) ProdProv: IDProducto, IDProveedor, Costo
3) Proveedores: IDProveedor, CodProv

No he podido hacer una consulta que me de por resultado una lista de
productos con costo y codigo del proveedor mas barato, esto es; algo silimar
a:

codigo Descripcion Costo CodProv
0010 Mi articulo 12.00 101

alguna sugerencia?

gracias

Antonio Ortiz Ramirez
asesor en sistemas
ant(a)aortiz.net
www.aortiz.net
www.progvisual.com

Preguntas similare

Leer las respuestas

#1 ulises
13/11/2004 - 23:38 | Informe spam
Con :

SELECT IDProducto, MIN(Costo)
FROM ProdProv
GROUP BY IDProducto

obtiene el precio menor existente para los productos, haciendo un join
con la tabla ProdProv obtenemos la lista de proveedores que tengan el
costo menor para los productos :

SELECT p.IDProducto, p.IDProveedor, p.Costo
FROM ProdProv p
JOIN
( SELECT IDProducto, MIN(Costo) as MinCosto
FROM ProdProv
GROUP BY IDProducto ) v
ON p.IDProducto = v.IDProducto AND p.Costo = v.MinCosto

entonces si hacemos un JOIN de Productos, la tabla derivada y la tabla
proveedores podremos obtener lo que deseas :


SELECT t.codigo, t.descripcion, m.Costo, d.CodProv
FROM Productos t
JOIN
( SELECT p.IDProducto, p.IDProveedor, p.Costo
FROM ProdProv p JOIN
( SELECT IDProducto, MIN(Costo) as MinCosto
FROM ProdProv
GROUP BY IDProducto ) v
ON p.IDProducto = v.IDProducto AND p.Costo = v.MinCosto ) m
ON t.IDProducto = m.IDProducto
JOIN
Proveedores d
ON m.IDProveedor = d.IDProveedor

esa sería la idea general, prueba el código que lo estoy escribiendo
directamente y no lo he probado.

Saludos,
Ulises

On Sat, 13 Nov 2004 08:35:07 -0700, "Antonio Ortiz"
wrote:

Tengo 3 tablas
1) Productos: IDProducto, codigo, Descripcion
2) ProdProv: IDProducto, IDProveedor, Costo
3) Proveedores: IDProveedor, CodProv

No he podido hacer una consulta que me de por resultado una lista de
productos con costo y codigo del proveedor mas barato, esto es; algo silimar
a:

codigo Descripcion Costo CodProv
0010 Mi articulo 12.00 101

alguna sugerencia?

gracias

Antonio Ortiz Ramirez
asesor en sistemas
ant(a)aortiz.net
www.aortiz.net
www.progvisual.com

Respuesta Responder a este mensaje
#2 Javier Loria
14/11/2004 - 16:14 | Informe spam
Hola Ulises:
Y si hay dos proveedores que proveen el producto al mismo costo?
Me parece que hay que hacer una consulta anidada mas :(
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda

"ulises" wrote in message
news:
Con :

SELECT IDProducto, MIN(Costo)
FROM ProdProv
GROUP BY IDProducto

obtiene el precio menor existente para los productos, haciendo un join
con la tabla ProdProv obtenemos la lista de proveedores que tengan el
costo menor para los productos :

SELECT p.IDProducto, p.IDProveedor, p.Costo
FROM ProdProv p
JOIN
( SELECT IDProducto, MIN(Costo) as MinCosto
FROM ProdProv
GROUP BY IDProducto ) v
ON p.IDProducto = v.IDProducto AND p.Costo = v.MinCosto

entonces si hacemos un JOIN de Productos, la tabla derivada y la tabla
proveedores podremos obtener lo que deseas :


SELECT t.codigo, t.descripcion, m.Costo, d.CodProv
FROM Productos t
JOIN
( SELECT p.IDProducto, p.IDProveedor, p.Costo
FROM ProdProv p JOIN
( SELECT IDProducto, MIN(Costo) as MinCosto
FROM ProdProv
GROUP BY IDProducto ) v
ON p.IDProducto = v.IDProducto AND p.Costo = v.MinCosto ) m
ON t.IDProducto = m.IDProducto
JOIN
Proveedores d
ON m.IDProveedor = d.IDProveedor

esa sería la idea general, prueba el código que lo estoy escribiendo
directamente y no lo he probado.

Saludos,
Ulises

On Sat, 13 Nov 2004 08:35:07 -0700, "Antonio Ortiz"
wrote:

>Tengo 3 tablas
>1) Productos: IDProducto, codigo, Descripcion
>2) ProdProv: IDProducto, IDProveedor, Costo
>3) Proveedores: IDProveedor, CodProv
>
>No he podido hacer una consulta que me de por resultado una lista de
>productos con costo y codigo del proveedor mas barato, esto es; algo


silimar
>a:
>
>codigo Descripcion Costo CodProv
>0010 Mi articulo 12.00 101
>
>alguna sugerencia?
>
>gracias
>
>Antonio Ortiz Ramirez
>asesor en sistemas
>ant(a)aortiz.net
>www.aortiz.net
>www.progvisual.com
>

Respuesta Responder a este mensaje
#3 ulises
14/11/2004 - 16:52 | Informe spam
Sí tienes razón, me olvidé mencionar que en ese caso saldrá duplicado
el producto-proveedor, si no es eso lo que desea si habría que
determinar cual se debe considerar.

Saludos,
Ulises
PD. Javier, un gusto leerte nuevamente ... :)

On Sun, 14 Nov 2004 09:14:07 -0600, "Javier Loria"
wrote:

Hola Ulises:
Y si hay dos proveedores que proveen el producto al mismo costo?
Me parece que hay que hacer una consulta anidada mas :(
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda

"ulises" wrote in message
news:
Con :

SELECT IDProducto, MIN(Costo)
FROM ProdProv
GROUP BY IDProducto

obtiene el precio menor existente para los productos, haciendo un join
con la tabla ProdProv obtenemos la lista de proveedores que tengan el
costo menor para los productos :

SELECT p.IDProducto, p.IDProveedor, p.Costo
FROM ProdProv p
JOIN
( SELECT IDProducto, MIN(Costo) as MinCosto
FROM ProdProv
GROUP BY IDProducto ) v
ON p.IDProducto = v.IDProducto AND p.Costo = v.MinCosto

entonces si hacemos un JOIN de Productos, la tabla derivada y la tabla
proveedores podremos obtener lo que deseas :


SELECT t.codigo, t.descripcion, m.Costo, d.CodProv
FROM Productos t
JOIN
( SELECT p.IDProducto, p.IDProveedor, p.Costo
FROM ProdProv p JOIN
( SELECT IDProducto, MIN(Costo) as MinCosto
FROM ProdProv
GROUP BY IDProducto ) v
ON p.IDProducto = v.IDProducto AND p.Costo = v.MinCosto ) m
ON t.IDProducto = m.IDProducto
JOIN
Proveedores d
ON m.IDProveedor = d.IDProveedor

esa sería la idea general, prueba el código que lo estoy escribiendo
directamente y no lo he probado.

Saludos,
Ulises

On Sat, 13 Nov 2004 08:35:07 -0700, "Antonio Ortiz"
wrote:

>Tengo 3 tablas
>1) Productos: IDProducto, codigo, Descripcion
>2) ProdProv: IDProducto, IDProveedor, Costo
>3) Proveedores: IDProveedor, CodProv
>
>No he podido hacer una consulta que me de por resultado una lista de
>productos con costo y codigo del proveedor mas barato, esto es; algo


silimar
>a:
>
>codigo Descripcion Costo CodProv
>0010 Mi articulo 12.00 101
>
>alguna sugerencia?
>
>gracias
>
>Antonio Ortiz Ramirez
>asesor en sistemas
>ant(a)aortiz.net
>www.aortiz.net
>www.progvisual.com
>




Respuesta Responder a este mensaje
#4 Antonio Ortiz
15/11/2004 - 17:44 | Informe spam
Gracias!!!

Parece que todavia me falta mucho que aprender sobre consultas anidadas y
SQL en general. Estaba mas sencillo de lo que pense, despues de intentar
durante dias al ver tu consulta se lee muy logico

saludos y gracias de nuevo


Antonio Ortiz Ramirez
asesor en sistemas
ant(a)aortiz.net
www.aortiz.net
www.progvisual.com


"ulises" escribió en el mensaje
news:
Sí tienes razón, me olvidé mencionar que en ese caso saldrá duplicado
el producto-proveedor, si no es eso lo que desea si habría que
determinar cual se debe considerar.

Saludos,
Ulises
PD. Javier, un gusto leerte nuevamente ... :)

On Sun, 14 Nov 2004 09:14:07 -0600, "Javier Loria"
wrote:

>Hola Ulises:
> Y si hay dos proveedores que proveen el producto al mismo costo?
> Me parece que hay que hacer una consulta anidada mas :(
> Saludos,
>
>
>Javier Loria
>Costa Rica
>Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
>que pueda ser copiado y pegado al Query Analizer.
>La version de SQL y Service Pack tambien ayuda
>
>"ulises" wrote in message
>news:
>> Con :
>>
>> SELECT IDProducto, MIN(Costo)
>> FROM ProdProv
>> GROUP BY IDProducto
>>
>> obtiene el precio menor existente para los productos, haciendo un join
>> con la tabla ProdProv obtenemos la lista de proveedores que tengan el
>> costo menor para los productos :
>>
>> SELECT p.IDProducto, p.IDProveedor, p.Costo
>> FROM ProdProv p
>> JOIN
>> ( SELECT IDProducto, MIN(Costo) as MinCosto
>> FROM ProdProv
>> GROUP BY IDProducto ) v
>> ON p.IDProducto = v.IDProducto AND p.Costo = v.MinCosto
>>
>> entonces si hacemos un JOIN de Productos, la tabla derivada y la tabla
>> proveedores podremos obtener lo que deseas :
>>
>>
>> SELECT t.codigo, t.descripcion, m.Costo, d.CodProv
>> FROM Productos t
>> JOIN
>> ( SELECT p.IDProducto, p.IDProveedor, p.Costo
>> FROM ProdProv p JOIN
>> ( SELECT IDProducto, MIN(Costo) as MinCosto
>> FROM ProdProv
>> GROUP BY IDProducto ) v
>> ON p.IDProducto = v.IDProducto AND p.Costo = v.MinCosto ) m
>> ON t.IDProducto = m.IDProducto
>> JOIN
>> Proveedores d
>> ON m.IDProveedor = d.IDProveedor
>>
>> esa sería la idea general, prueba el código que lo estoy escribiendo
>> directamente y no lo he probado.
>>
>> Saludos,
>> Ulises
>>
>> On Sat, 13 Nov 2004 08:35:07 -0700, "Antonio Ortiz"
>> wrote:
>>
>> >Tengo 3 tablas
>> >1) Productos: IDProducto, codigo, Descripcion
>> >2) ProdProv: IDProducto, IDProveedor, Costo
>> >3) Proveedores: IDProveedor, CodProv
>> >
>> >No he podido hacer una consulta que me de por resultado una lista de
>> >productos con costo y codigo del proveedor mas barato, esto es; algo
>silimar
>> >a:
>> >
>> >codigo Descripcion Costo CodProv
>> >0010 Mi articulo 12.00 101
>> >
>> >alguna sugerencia?
>> >
>> >gracias
>> >
>> >Antonio Ortiz Ramirez
>> >asesor en sistemas
>> >ant(a)aortiz.net
>> >www.aortiz.net
>> >www.progvisual.com
>> >
>>
>

Respuesta Responder a este mensaje
#5 Antonio Ortiz
17/11/2004 - 07:26 | Informe spam
Muchas gracias, solo te comento que es exactamente como lo necesitaba.

Tome la consulta y le hice ligeras modificaciones y quedo tal como se
requeria. Muchisimas gracias. Por cierto, necesito que muestre 2 proveedores
(o mas) del mismo producto cuando coinciden en el costo mas bajo, esto es,
que muestre todos los proveedores con el menor costo.

saludos,


Antonio Ortiz Ramirez
asesor en sistemas
ant(a)aortiz.net
www.aortiz.net
www.progvisual.com
"Antonio Ortiz" escribió en el mensaje
news:
Gracias!!!

Parece que todavia me falta mucho que aprender sobre consultas anidadas y
SQL en general. Estaba mas sencillo de lo que pense, despues de intentar
durante dias al ver tu consulta se lee muy logico

saludos y gracias de nuevo


Antonio Ortiz Ramirez
asesor en sistemas
ant(a)aortiz.net
www.aortiz.net
www.progvisual.com


"ulises" escribió en el mensaje
news:
> Sí tienes razón, me olvidé mencionar que en ese caso saldrá duplicado
> el producto-proveedor, si no es eso lo que desea si habría que
> determinar cual se debe considerar.
>
> Saludos,
> Ulises
> PD. Javier, un gusto leerte nuevamente ... :)
>
> On Sun, 14 Nov 2004 09:14:07 -0600, "Javier Loria"
> wrote:
>
> >Hola Ulises:
> > Y si hay dos proveedores que proveen el producto al mismo costo?
> > Me parece que hay que hacer una consulta anidada mas :(
> > Saludos,
> >
> >
> >Javier Loria
> >Costa Rica
> >Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
> >que pueda ser copiado y pegado al Query Analizer.
> >La version de SQL y Service Pack tambien ayuda
> >
> >"ulises" wrote in message
> >news:
> >> Con :
> >>
> >> SELECT IDProducto, MIN(Costo)
> >> FROM ProdProv
> >> GROUP BY IDProducto
> >>
> >> obtiene el precio menor existente para los productos, haciendo un


join
> >> con la tabla ProdProv obtenemos la lista de proveedores que tengan el
> >> costo menor para los productos :
> >>
> >> SELECT p.IDProducto, p.IDProveedor, p.Costo
> >> FROM ProdProv p
> >> JOIN
> >> ( SELECT IDProducto, MIN(Costo) as MinCosto
> >> FROM ProdProv
> >> GROUP BY IDProducto ) v
> >> ON p.IDProducto = v.IDProducto AND p.Costo = v.MinCosto
> >>
> >> entonces si hacemos un JOIN de Productos, la tabla derivada y la


tabla
> >> proveedores podremos obtener lo que deseas :
> >>
> >>
> >> SELECT t.codigo, t.descripcion, m.Costo, d.CodProv
> >> FROM Productos t
> >> JOIN
> >> ( SELECT p.IDProducto, p.IDProveedor, p.Costo
> >> FROM ProdProv p JOIN
> >> ( SELECT IDProducto, MIN(Costo) as MinCosto
> >> FROM ProdProv
> >> GROUP BY IDProducto ) v
> >> ON p.IDProducto = v.IDProducto AND p.Costo = v.MinCosto ) m
> >> ON t.IDProducto = m.IDProducto
> >> JOIN
> >> Proveedores d
> >> ON m.IDProveedor = d.IDProveedor
> >>
> >> esa sería la idea general, prueba el código que lo estoy escribiendo
> >> directamente y no lo he probado.
> >>
> >> Saludos,
> >> Ulises
> >>
> >> On Sat, 13 Nov 2004 08:35:07 -0700, "Antonio Ortiz"
> >> wrote:
> >>
> >> >Tengo 3 tablas
> >> >1) Productos: IDProducto, codigo, Descripcion
> >> >2) ProdProv: IDProducto, IDProveedor, Costo
> >> >3) Proveedores: IDProveedor, CodProv
> >> >
> >> >No he podido hacer una consulta que me de por resultado una lista de
> >> >productos con costo y codigo del proveedor mas barato, esto es; algo
> >silimar
> >> >a:
> >> >
> >> >codigo Descripcion Costo CodProv
> >> >0010 Mi articulo 12.00 101
> >> >
> >> >alguna sugerencia?
> >> >
> >> >gracias
> >> >
> >> >Antonio Ortiz Ramirez
> >> >asesor en sistemas
> >> >ant(a)aortiz.net
> >> >www.aortiz.net
> >> >www.progvisual.com
> >> >
> >>
> >
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida