UTNianos

Versión completa: [Gestión de Datos] Guías T-SQL y SQL + 2 parciales de Restagno + resolución de todo
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Bueno gente el otro día tratando de salvar la cursada de esta materia me di cuenta que no había guías T-SQL resueltas. Así que me copé y me la fumé entera. Aclaro que muchos ejercicios interpreté a mi manera porque eran bastante ambiguos y otros directamente ilegibles ("ordenar empleados por error" (???) lo cambié a edad)

No sé cómo serán las cursadas de otros profesores pero con Restagno a la hora de rendir está PROHIBIDO meter un SELECT en el FROM, y por lo tanto al resolver las guías no lo hice.

Es probable que muchos estén resueltos de formas poco performantes, o desconociendo objetos de T-SQL que hubieran facilitado muchísimo la resolución, así que se agradece cualquier corrección.

Aparte subo dos recuperatorios (de puro SQL/T-SQL) de Restagno, resueltos también por mí, uno que me dejó en la lona porque no había preparado la parte T-SQL y otro con el que salvé la cursada.

La base de datos junto con su modelo y las guías (son de 1C 2015) están acá https://drive.google.com/file/d/0B_t8j3n...BTT1k/view

Los ejercicios resueltos:[attachment=14168](actualizado 10/11/16)
Recuperatorio 22/06/2016 resuelto:[attachment=13618]
Recuperatorio 06/07/2016 resuelto:[attachment=13619]
Muy bueno! gracias, me sirve ahora que la curso los sabados.
Vi que en el Ejercicio 4 te quedaba la tercer columna llena de NULLs, así que me decidí a aportar mi solución por si alguien tiene ganas de verla y contarme que le parece. roll


SELECT codigo, detalle, cantidad FROM (SELECT prod_codigo codigo, prod_detalle detalle, SUM( ISNULL(comp_cantidad, 1) ) cantidadFROM Producto AS p
LEFT JOIN Composicion as c
ON p.prod_codigo = c.comp_producto
GROUP BY p.prod_codigo, p.prod_detalle) as CantidadProductos
JOIN STOCK as s
ON CantidadProductos.codigo = s.stoc_producto
GROUP BY CantidadProductos.codigo, detalle, cantidad
HAVING AVG(stoc_cantidad) > 100.00

(09-11-2016 14:45)Juliet escribió: [ -> ]Vi que en el Ejercicio 4 te quedaba la tercer columna llena de NULLs, así que me decidí a aportar mi solución por si alguien tiene ganas de verla y contarme que le parece. roll


SELECT codigo, detalle, cantidad FROM (SELECT prod_codigo codigo, prod_detalle detalle, SUM( ISNULL(comp_cantidad, 1) ) cantidadFROM Producto AS p
LEFT JOIN Composicion as c
ON p.prod_codigo = c.comp_producto
GROUP BY p.prod_codigo, p.prod_detalle) as CantidadProductos
JOIN STOCK as s
ON CantidadProductos.codigo = s.stoc_producto
GROUP BY CantidadProductos.codigo, detalle, cantidad
HAVING AVG(stoc_cantidad) > 100.00

Gracias por la corrección!! me puse a mirar y mi error era mucho más grave de lo que parecía
Para los que no tengan permitido usar SELECT en el FROM por boludeces del profe que tengan la solución sería algo así:


SELECT prod_codigo, prod_detalle,
isnull(
(SELECT SUM(comp_cantidad)
FROM Composicion
WHERE comp_producto=p.prod_codigo)
,0) prod_componentes
FROM Producto p
LEFT JOIN STOCK s
ON p.prod_codigo=s.stoc_producto
GROUP BY prod_codigo, prod_detalle
HAVING AVG(isnull(s.stoc_cantidad,0)) > 100


Muchas gracias!!
En el ejercicio 10 la otra vuelta lo hicimos con reynosa, y en realidad no muestra los 10 productos que mas se vendieron en la historia y los 10 que menos se vendieron en la historia, es buscar el producto que este en un subconjunto o en el otro, y el cliente que haya realizado la mayor compra es sobre ese mismo producto. Quedo asi:



select prod_codigo, (select top 1 fact_cliente
from Factura join Item_Factura on (fact_tipo+fact_sucursal+fact_numero=item_tipo+item_sucursal+item_numero)
where item_producto = prod_codigo
group by fact_cliente
order by sum(item_cantidad) desc)
from Producto
where prod_codigo in
(select top 10 item_producto
from Item_Factura
group by item_producto
order by sum(item_cantidad) desc)
OR
(SELECT top 10 item_producto
from Item_Factura
group by item_producto
order by sum(item_cantidad))



Igual esto tira un error, dice lo siguiente: Mens. 4145, Nivel 15, Estado 1, Línea 16
Se especificó una expresión no booleana en un contexto donde se esperaba una condición, cerca de ')'.

Alguien sabe por qué puede ser? Bueno gracias desde ya
(10-04-2017 00:19)Sir Ulrich escribió: [ -> ]En el ejercicio 10 la otra vuelta lo hicimos con reynosa, y en realidad no muestra los 10 productos que mas se vendieron en la historia y los 10 que menos se vendieron en la historia, es buscar el producto que este en un subconjunto o en el otro, y el cliente que haya realizado la mayor compra es sobre ese mismo producto. Quedo asi:



select prod_codigo, (select top 1 fact_cliente
from Factura join Item_Factura on (fact_tipo+fact_sucursal+fact_numero=item_tipo+item_sucursal+item_numero)
where item_producto = prod_codigo
group by fact_cliente
order by sum(item_cantidad) desc)
from Producto
where prod_codigo in
(select top 10 item_producto
from Item_Factura
group by item_producto
order by sum(item_cantidad) desc)
OR
(SELECT top 10 item_producto
from Item_Factura
group by item_producto
order by sum(item_cantidad))



Igual esto tira un error, dice lo siguiente: Mens. 4145, Nivel 15, Estado 1, Línea 16
Se especificó una expresión no booleana en un contexto donde se esperaba una condición, cerca de ')'.

Alguien sabe por qué puede ser? Bueno gracias desde ya

Despues del OR no hay ninguna condicion sino un select que devuelve un conjunto, ahi le falta algo que devuelva un booleano, sin haber leido bien el ejercicio se me ocurre que hay que poner el prod_codigo IN ahi tambien
Exactamente como dijiste damianvc31 faltaba eso. La dejo aca en limpio la query para el/la que la quiera probar:



select prod_codigo, (select top 1 fact_cliente
from Factura join Item_Factura on (fact_tipo+fact_sucursal+fact_numero=item_tipo+item_sucursal+item_numero)
where item_producto = prod_codigo
group by fact_cliente
order by sum(item_cantidad) desc) 'cliente que mayor compra realizo'
from Producto
where prod_codigo in
(select top 10 item_producto
from Item_Factura
group by item_producto
order by sum(item_cantidad) desc)
OR prod_codigo IN
(SELECT top 10 item_producto
from Item_Factura
group by item_producto
order by sum(item_cantidad))


Abrazo!
Hola!

Como hago para instalar la base de datos que esta en el drive??
Gracias!
Listo! ya lo instale!
Gracias!
Excelente aporte! ,e sirve para chequear soluciones ahora que la estoy cursando... gracias!
Dejo la practica de SQL de este cuatrimestre, son 26 ejercicios.
Es el mismo modelo. Algunos fueron resueltos por Reinosa en clase, otros son optimizaciones de los que ya estaban acá y los demás propios.
Bienvenidas correcciones y optimizaciones, sobre todo del 21 que se toma su tiempo en responder.

Google Drive
SQL

Agrego la de T-SQL
URLs de referencia