UTNianos

Versión completa: Ayuda ejercicios gestión de datos
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
Buenas Utnianos. Alguien puede ayudarme con esto? Tengo parcial dentro de unas semanas y hay algunos ejercicios que no me quedan claros. Encontré en esta página ejercicios resueltos que son similares pero me resultan algo confusos. Ya no se donde más buscar alguna info o ejercicios resueltos for dummies. Si alguien que la este cursando o la haya cursado recientemente me puede ayudar con los ejercicios se los agradeceré =) .Estoy estancado desde el ejercicio 7 y si sigo así me voy para la b cry .Gracias
cuando rendis? yo ahora estoy complicado
pero el finde si puedo hago algunos..

si queres podes mirar este link, que es similar: otro modelo, ejercicios.. y mis resueltos =)
La mejor manera, a mi entender, es contra la pc!
yo crearia todo en una base de datos y a "TIRAR QUERIES!"
Hola,

Yo rindo este viernes y estuve practicando de esa guía. Tengo algunos cuantos resueltos, quizás te sirve. El 14 y 17 ni te fijes porque sé que están mal y no se me ocurrió cómo resolverlos. El 18 me costo un montón y no sé si es la mejor forma o si está del todo bien. Espero que te ayude aunque sea a despejar algunas dudas.

Saludos,
Vero.
[attachment=6780]
Gracias por la ayuda! thumbup3 Rindo dentro de una semana y media. Más que practicar necesito reforzar contenidos. Veremos que pasa. Todavía estoy a tiempo
si tenes dudas puntuales ("este ejercicio lo hice asi pero no estoy seguro si da bien" o "esperaba este result y no sale") preguntá !
Alguien me puede ayudar con este que me está rompiendo la cabeza (es un ejercicio de parcial)

Desarrolle el/los elementos de base de datos necesarios para que ante una venta automáticamente se descuenten del stock los articulos vendidos. Se descontaran del deposito que mas producto posea y se supone que el stock se almacena tanto de productos simples como compuestos (si se acaba el stock de los compuestos no se arman combos)
En caso que no alcance el stock de un deposito se descontara del siguiente y asi hasta agotar los depositos posibles. En ultima instancia se dejará stock negativo en el ultimo deposito que se descontó.

Se que hay que hacer un trigger y mas o menos lo tengo planteado pero se me dificulta la parte de restar el stock en cada uno de los depositos y que el ultimo quede en negativo.

GRACIAS
poné que es lo que tenes hecho


se me hace que tenes que hacer una función (y la usas recursivamente), que busque "el siguiente deposito", con caso base que no hay deposito siguiente, y ahi descontas del actual (que es el ultimo)
Acá te lo paso.
Fijate el comentario que puse en el medio.


CREATE TRIGGER DescontarStock
ON Item_Factura
AFTER INSERT

AS

BEGIN

DECLARE @productoVendido char(8)
DECLARE @cantidadARestar decimal(12,2)
DECLARE @cantidadRestante decimal(12,2)
DECLARE @cantidadActual decimal(12,2)
DECLARE @deposito char(2)

DECLARE CURSOR_VENTAS CURSOR
FOR
SELECT item_producto, item_cantidad
FROM inserted

OPEN CURSOR_VENTAS
FETCH CURSOR_VENTAS
INTO @productoVendido, @cantidadARestar

WHILE @@FETCH_STATUS = 0

BEGIN

DECLARE CURSOR_DEPOSITOS CURSOR
FOR
SELECT TOP 1 stoc_deposito, stoc_cantidad, stoc_cantidad - @cantidadARestar
FROM STOCK
WHERE stoc_producto = @productoVendido
ORDER BY stoc_cantidad DESC

OPEN CURSOR_DEPOSITOS
FETCH CURSOR_DEPOSITOS
INTO @deposito, @cantidadActual, @cantidadRestante

WHILE @@FETCH_STATUS = 0

BEGIN


//aca tengo que restar el stock y hacer todo lo que pide el enunciado, el primer cursor es por si hay una venta que implica un insert con muchos registros (agarra cada uno de ellos y los va descontando del stock) y el segundo cursor es para que vaya ciclando por los diferentes depositos que tienen ese producto (no se si esta bien esto ultimo)


FETCH CURSOR_DEPOSITOS
INTO @deposito, @cantidadActual


END

CLOSE CURSOR_DEPOSITOS
DEALLOCATE CURSOR_DEPOSITOS

FETCH CURSOR_VENTAS
INTO @productoVendido, @cantidadARestar

END

CLOSE CURSOR_VENTAS
DEALLOCATE CURSOR_VENTAS

END



Saludos

pd: si hay variables o cosas de más es porque estuve probando cosas para resolverlo pero no me salieron, no les des bola.

Off-topic:
Estuve viendo los ejercicios y no son tan complicados... pinta copada la materia =P
Alguien tiene la base de datos armada? En MySQL/SQL/lo que venga
El 14 dice "Mostrar todos los clientes" por lo que tienen que aparecer la misma cantidad si hacés

Select * from Cliente.

Me quedó así:


Select clie_codigo,
(select count(*) from factura where fact_cliente = A.clie_codigo and year(fact_fecha) = 2012),
(select avg(fact_total) from factura where fact_cliente = A.clie_codigo and year(fact_fecha) = 2012),
(select count(distinct(item_producto))
from Factura F join
Item_Factura I on (F.fact_tipo = I.item_tipo and
F.fact_sucursal = I.item_sucursal and
F.fact_numero = I.item_numero)
where F.fact_cliente = A.clie_codigo and year(F.fact_fecha) = 2012),
(select top 1 fact_total from factura where fact_cliente = A.clie_codigo and year(fact_fecha) = 2012 order by 1 desc)
from Cliente A
order by 2 desc



El 15 alguien lo hizo? Lo tengo hecho de esta forma, da bien pero no sé si hay otra. Me queda la duda con el
where (I1.item_producto < I2.item_producto) pero no encontré otra forma de sacar los repetidos.
Si muestra 1 2, 1 3, 1 4, cuando llegue al 4 no va a mostrar ni 4 1, 4 2, ni 4 3 porque son menores pero ya lo mostró con 2 3, 2 4, 3 4...



select I1.item_producto, P1.prod_detalle, I2.item_producto, P2.prod_detalle, count(*)
from Item_Factura I1 join
Item_Factura I2 on (I1.item_numero = I2.item_numero AND
I1.item_sucursal = I2.item_sucursal AND
I1.item_tipo = I2.item_tipo) join
Producto P1 on (P1.prod_codigo = I1.item_producto) join
Producto P2 on (P2.prod_codigo = I2.item_producto)
where (I1.item_producto < I2.item_producto) --and count(*) > 500
group by I1.item_producto, P1.prod_detalle, I2.item_producto, P2.prod_detalle
order by 1, 2


Dejó el 16. No entendí bien por qué dice lo de la Provincia si no está en el Diseño. Y otra cosa, qué tiene que ver la aclaración de la composición del producto si se vende como producto único?



select C.clie_codigo as 'Cliente',
C.clie_razon_social as 'Razón Social',
isnull((select sum(IF1.item_cantidad)
from Item_Factura IF1 join
Factura F1 on IF1.item_sucursal = F1.fact_sucursal and
IF1.item_tipo = F1.fact_tipo and
IF1.item_numero = F1.fact_numero
where F1.fact_cliente = C.clie_codigo and
year(F1.fact_fecha) = 2012),0) as 'U Vendidas 2012',
isnull((select top 1 IF2.item_producto
from Item_Factura IF2 join
Factura F2 on IF2.item_sucursal = F2.fact_sucursal and
IF2.item_tipo = F2.fact_tipo and
IF2.item_numero = F2.fact_numero
where F2.fact_cliente = C.clie_codigo and
year(F2.fact_fecha) = 2012
group by IF2.item_producto
order by sum(IF2.item_cantidad*IF2.item_precio) desc, IF2.item_producto),0) as 'P Mayor Venta 2012'
from Cliente C
where (select sum(F3.fact_total)
from Factura F3
where F3.fact_cliente = C.clie_codigo)
<
(0.33 * (select avg(IF2.item_precio * IF2.item_cantidad)
from Item_Factura IF2 join
Factura F2 on (IF2.item_numero = F2.fact_numero AND
IF2.item_sucursal = F2.fact_sucursal AND
IF2.item_tipo = F2.fact_tipo)
where year(F2.fact_fecha) = 2012))
group by C.clie_codigo, C.clie_razon_social
order by 1



El 17 también.



select isnull(year(F1.fact_fecha)*100+(month(F1.fact_fecha)),'999999') as Periodo,
P.prod_codigo as Producto,
P.prod_detalle as Detalle,
isnull(sum(IF1.item_cantidad * IF1.item_precio),0) as Cantidad_Vendida,
isnull((select sum(IF2.item_cantidad * IF2.item_precio)
from Factura F2 join
Item_Factura IF2 on (IF2.item_numero = F2.fact_numero and
IF2.item_sucursal = F2.fact_sucursal and
IF2.item_tipo = F2.fact_tipo)
where year(F2.fact_fecha) = year(F1.fact_fecha)-1 and
month(F2.fact_fecha) = month(F1.fact_fecha) and
IF2.item_producto = P.prod_codigo),0) as Ventas_Año_Anterior,
count(IF1.item_producto) as Cant_Facturas
from Producto P left join
Item_Factura IF1 on (P.prod_codigo = IF1.item_producto) left join
Factura F1 on (IF1.item_numero = F1.fact_numero and
IF1.item_sucursal = F1.fact_sucursal and
IF1.item_tipo = F1.fact_tipo )
group by year(F1.fact_fecha), month(F1.fact_fecha), P.prod_codigo, P.prod_detalle
order by Periodo, P.prod_codigo


(10-09-2015 21:30)leandrong escribió: [ -> ]El 14 dice "Mostrar todos los clientes" por lo que tienen que aparecer la misma cantidad si hacés

Select * from Cliente.

Me quedó así:


Select clie_codigo,
(select count(*) from factura where fact_cliente = A.clie_codigo and year(fact_fecha) = 2012),
(select avg(fact_total) from factura where fact_cliente = A.clie_codigo and year(fact_fecha) = 2012),
(select count(distinct(item_producto))
from Factura F join
Item_Factura I on (F.fact_tipo = I.item_tipo and
F.fact_sucursal = I.item_sucursal and
F.fact_numero = I.item_numero)
where F.fact_cliente = A.clie_codigo and year(F.fact_fecha) = 2012),
(select top 1 fact_total from factura where fact_cliente = A.clie_codigo and year(fact_fecha) = 2012 order by 1 desc)
from Cliente A
order by 2 desc



El 15 alguien lo hizo? Lo tengo hecho de esta forma, da bien pero no sé si hay otra. Me queda la duda con el
where (I1.item_producto < I2.item_producto) pero no encontré otra forma de sacar los repetidos.
Si muestra 1 2, 1 3, 1 4, cuando llegue al 4 no va a mostrar ni 4 1, 4 2, ni 4 3 porque son menores pero ya lo mostró con 2 3, 2 4, 3 4...



select I1.item_producto, P1.prod_detalle, I2.item_producto, P2.prod_detalle, count(*)
from Item_Factura I1 join
Item_Factura I2 on (I1.item_numero = I2.item_numero AND
I1.item_sucursal = I2.item_sucursal AND
I1.item_tipo = I2.item_tipo) join
Producto P1 on (P1.prod_codigo = I1.item_producto) join
Producto P2 on (P2.prod_codigo = I2.item_producto)
where (I1.item_producto < I2.item_producto)
group by I1.item_producto, P1.prod_detalle, I2.item_producto, P2.prod_detalle
order by 1, 2




Respecto al 15, como sabes que esos pares de productos fueron vendidos mas de 500 veces?
(14-09-2015 22:40)roman1981 escribió: [ -> ]Respecto al 15, como sabes que esos pares de productos fueron vendidos mas de 500 veces?

En el where hay que agregar count(*) > 500 pero como en la base de datos no hay tantos valores se lo saqué para validar y me olvidé de ponerlo. Ahí lo agregué.
Acá dejo del 18, me mató la el segundo mayor pero lo saqué. Me falta que si es un solo producto el que se vendió en el rubro en en el segundo producto no ponaga nada. Por ahora lo repite.



Select R.rubr_id, R.rubr_detalle as Detalle_Rubro,
isnull((select sum(IF1.item_cantidad * IF1.item_precio)
from Item_Factura IF1 join
Producto P1 on (IF1.item_producto = P1.prod_codigo)
where P1.prod_rubro = R.rubr_id),0) as Ventas,
isnull((select top 1 P2.prod_codigo
from Item_Factura IF2 join
Producto P2 on (IF2.item_producto = P2.prod_codigo)
where P2.prod_rubro = R.rubr_id
group by P2.prod_codigo
order by sum(IF2.item_cantidad * IF2.item_precio) desc),0) as Prod1,
isnull((select top 1 item_producto
from Item_Factura where item_producto in (select top 2 P3.prod_codigo
from Item_Factura IF3 join
Producto P3 on (IF3.item_producto = P3.prod_codigo)
where P3.prod_rubro = R.rubr_id
group by P3.prod_codigo
order by sum(IF3.item_cantidad * IF3.item_precio) desc)
group by item_producto
order by sum(item_cantidad * item_precio) asc),0) as Prod2,
isnull((select top 1 F4.Fact_cliente
from Factura F4 join
Item_Factura IF4 on (IF4.item_numero = F4.fact_numero and
IF4.item_sucursal = F4.fact_sucursal and
IF4.item_tipo = F4.fact_tipo) join
Producto P1 on (IF4.item_producto = P1.prod_codigo)
where P1.prod_rubro = R.rubr_id --and
--F4.fact_fecha between dateadd(day,-30,convert(date,getdate())) and convert(date,getdate())
group by F4.Fact_cliente
order by sum(IF4.item_cantidad * IF4.item_precio) desc),0) as Cliente
from Rubro R


Páginas: 1 2
URLs de referencia