20-07-2014, 16:56
Como va?
En el primer recuperatorio de Reinosa nos tomaron este Ejercicio de SQL que me gustaría compartir:
EJERCICIO 1, RECUPERATORIO 08/07/2014
Escriba una consulta SQL que retorne un ranking de los mejores 3 empleados del 2012.
Se deberá retornar legajo, nombre y apellido, año de ingreso, puntaje 2011, puntaje 2012.
El puntaje de cada empleado se calculará de la siguiente manera:
Para los que hayan vendido al menos 10 facturas el puntaje se calculará como la cantidad de facturas
que superen los 100 pesos que haya vendido en el año, para los que tengan menos de 10 facturas
en el año el cálculo del puntaje será el 50% de cantidad de facturas realizadas por sus
subordinados directos en dicho año.
.... yo quería resolverlo usando IFs, pero ahí recordé que no existen los IFs fuera de Transact, pero al mismo tiempo me olvidé del uso de CASEs.... Así que se me ocurrió resolverlo de la siguiente forma usando Sumas:
... Aprobé con un 4 roñoso, pero me quedé con las dudas de cuál es la mejor forma de resolver esto.. ¿alguna sugerencia?
En el primer recuperatorio de Reinosa nos tomaron este Ejercicio de SQL que me gustaría compartir:
EJERCICIO 1, RECUPERATORIO 08/07/2014
Escriba una consulta SQL que retorne un ranking de los mejores 3 empleados del 2012.
Se deberá retornar legajo, nombre y apellido, año de ingreso, puntaje 2011, puntaje 2012.
El puntaje de cada empleado se calculará de la siguiente manera:
Para los que hayan vendido al menos 10 facturas el puntaje se calculará como la cantidad de facturas
que superen los 100 pesos que haya vendido en el año, para los que tengan menos de 10 facturas
en el año el cálculo del puntaje será el 50% de cantidad de facturas realizadas por sus
subordinados directos en dicho año.
.... yo quería resolverlo usando IFs, pero ahí recordé que no existen los IFs fuera de Transact, pero al mismo tiempo me olvidé del uso de CASEs.... Así que se me ocurrió resolverlo de la siguiente forma usando Sumas:
SELECT TOP 3
empl_codigo AS Legajo
, empl_nombre
, empl_apellido
, YEAR(empl_ingreso) as AnioIngreso
,
(
SELECT COUNT(fact_tipo)
FROM facultad.dbo.Factura
WHERE
fact_vendedor = empl_codigo
AND
fact_total > 100
AND
YEAR(fact_fecha) = 2011
AND
COUNT(F1.fact_tipo) >= 10
)
+(
SELECT COUNT(fact_tipo)/2
FROM
facultad.dbo.Factura
, facultad.dbo.Empleado E2
WHERE
E2.empl_jefe = E.empl_codigo
AND
fact_vendedor = E2.empl_codigo
AND
YEAR(fact_fecha) = 2011
AND
COUNT(F1.fact_tipo) < 10
) AS Puntaje2011
, (
SELECT COUNT(fact_tipo)
FROM facultad.dbo.Factura
WHERE
fact_vendedor = empl_codigo
AND
fact_total > 100
AND
YEAR(fact_fecha) = 2012
AND
COUNT(F1.fact_tipo) >= 10
)
+(
SELECT COUNT(fact_tipo)/2
FROM
facultad.dbo.Factura
, facultad.dbo.Empleado E2
WHERE
E2.empl_jefe = E.empl_codigo
AND
fact_vendedor = E2.empl_codigo
AND
YEAR(fact_fecha) = 2012
AND
COUNT(F1.fact_tipo) < 10
) AS Puntaje2012
FROM
facultad.dbo.Empleado E
, facultad.dbo.Factura F1
WHERE
fact_vendedor = empl_codigo
AND
YEAR(F1.fact_fecha) = 2012
GROUP BY
empl_codigo
, empl_nombre
, empl_apellido
, empl_ingreso
ORDER BY
Puntaje2012 DESC
... Aprobé con un 4 roñoso, pero me quedé con las dudas de cuál es la mejor forma de resolver esto.. ¿alguna sugerencia?