UTNianos

Versión completa: Duda ejercicio 8 Guia de SQL- Gestion de Datos
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Les hago una consulta sobre este punto el 8 , no logro sacar lo que piden , el ejercicio dice : "Mostrar para el o los artículos que tengan stock en todos los depósitos, nombre del artículo, stock del depósito que más stock tiene"

Yo hasta donde llegue es :
select P.prod_detalle, MAX(S.stoc_cantidad) as MAXIMO
from facultad.dbo.Producto P , facultad.dbo.STOCK S
where P.prod_codigo = S.stoc_producto AND
S.stoc_cantidad > 0
group by P.prod_detalle, MAXIMO


Adjunto una imagen del modelo de datos


Agradezco cualquier ayuda, gracias!
Lo "complejo" acá es entender como hacer para saber que productos tienen stock en TODOS los depositos.
De qué manera se puede saber eso?, Si vos tenes 3 depositos, para un artículo en la tabla stock, tiene que figurar 3 veces (uno por cada depósito).

Entonces uno podría hacer la siguiente query para traer todos los productos que tienen stock en todos los depositos.


SELECT STOC_PRODUCTO FROM STOCK
GROUP BY STOC_PRODUCTO
HAVING COUNT(STOC_PRODUCTO) = (SELECT COUNT(DEPO_CODIGO) FROM DEPOSITO)


Con esa query te traes todos los productos que tienen Stock en los depositos.
Ahora, si queres traerte cual es la cantidad máxima que tienen hay que añadir:



SELECT STOC_PRODUCTO, MAX(Stoc_Cantidad) FROM STOCK
GROUP BY STOC_PRODUCTO
HAVING COUNT(STOC_PRODUCTO) = (SELECT COUNT(DEPO_CODIGO) FROM DEPOSITO)



Ahora para finalizar, nos falta traer el Detalle del producto. Para ello hay que ir a buscar la información a la Tabla Producto y empleamos un JOIN .



SELECT P.PROD_DETALLE, MAX(Stoc_Cantidad) FROM STOCK S
INNER JOIN PRODUCTO P ON S.STOC_PRODUCTO = P.PROD_CODIGO
GROUP BY P.PROD_DETALLE
HAVING COUNT(STOC_PRODUCTO) = (SELECT COUNT(DEPO_CODIGO) FROM DEPOSITO)



Mas allá de si funciona la query o no, fijate si se entendió la metodología/lógica para llegar a lo pedido.
sisis se re entendio! mil gracias Martin !
Hola,

Fijate que yo lo hice así:




select P.prod_codigo,P.prod_detalle , MAX(S.stoc_cantidad) as CantidadMaxima
from Producto P, STOCK S
where P.prod_codigo = S.stoc_producto
and S.stoc_cantidad > 0
group by S.stoc_producto, P.prod_detalle, P.prod_codigo
having (count(*)) = (select count(*) from DEPOSITO)




Saludos!
URLs de referencia