CarlosGPT Seguir
Curioso
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
- Desde
- 16 May 2022
- Mensajes
- 5
Buenas tardes estimados, el ejercicio que he realizado me pide lo siguiente:
Utilizando la función MAX() crear una función que muestre el registro del empleado que haya sacado más dinero por sus órdenes de venta.
Para hacer este ejercicio voy a utilizar otra función que he realizado previamente llamada "costoTotal", esta funcón me da como salida el costo total de una orden de venta con solo recibir el ID de la orden:
ALTER FUNCTION [dbo].[costoTotal](@ordenID int)
RETURNS table
RETURN (SELECT [Order Details].OrderID,
ROUND(SUM((UnitPrice -(UnitPrice*Discount)) * Quantity), 2)
AS Total_Orden FROM [Order Details]
WHERE OrderID = @ordenID
GROUP BY OrderID)
si la ejecuto:
select * from dbo.costoTotal(10250)
me da la siguiente salida:
OrderID Total_Orden
10250 1552.60
Ahora, utilizando esta función he creado la función que se me pide:
ALTER FUNCTION dbo.Maxima_Ventas()
RETURNS @table_resultado table (IdEmpleado int, Primer_Nombre nvarchar(10), Monto_total money)
AS
BEGIN
DECLARE @max_monto money;
SELECT @max_monto=MAX(res.Monto_total)
FROM(
SELECT SUM(c.Total_Orden) Monto_total
FROM Orders o
CROSS APPLY dbo.costoTotal(rderID) c
GROUP BY o.EmployeeID
) res
INSERT INTO @table_resultado
SELECT o.EmployeeID, e.FirstName, @max_monto
FROM Orders o
JOIN Employees e ON o.EmployeeID = e.EmployeeID
GROUP BY o.EmployeeID, e.FirstName
RETURN
END
Pero al ejecutarla:
SELECT * FROM dbo.Maxima_Ventas
Obtengo el resultado correcto en la columna "Monto_total"
Pero me salen los registros de todos los empleados y sus ID:
idEmpleado Primer_Nombre Monto_Total
1 Andrew 232890.84
2 Janeth 232890.84
3 Margaret 232890.84
4 Steven 232890.84
5 Michael 232890.84
6 etc... etc...
7
8
9
Pero la respuesta que yo busco es la siguiente, correspondiente al empleado Margareth:
idEmpleado Primer_Nombre Monto_Total
3 Margaret 232890.84
Utilizando la función MAX() crear una función que muestre el registro del empleado que haya sacado más dinero por sus órdenes de venta.
Para hacer este ejercicio voy a utilizar otra función que he realizado previamente llamada "costoTotal", esta funcón me da como salida el costo total de una orden de venta con solo recibir el ID de la orden:
ALTER FUNCTION [dbo].[costoTotal](@ordenID int)
RETURNS table
RETURN (SELECT [Order Details].OrderID,
ROUND(SUM((UnitPrice -(UnitPrice*Discount)) * Quantity), 2)
AS Total_Orden FROM [Order Details]
WHERE OrderID = @ordenID
GROUP BY OrderID)
si la ejecuto:
select * from dbo.costoTotal(10250)
me da la siguiente salida:
OrderID Total_Orden
10250 1552.60
Ahora, utilizando esta función he creado la función que se me pide:
ALTER FUNCTION dbo.Maxima_Ventas()
RETURNS @table_resultado table (IdEmpleado int, Primer_Nombre nvarchar(10), Monto_total money)
AS
BEGIN
DECLARE @max_monto money;
SELECT @max_monto=MAX(res.Monto_total)
FROM(
SELECT SUM(c.Total_Orden) Monto_total
FROM Orders o
CROSS APPLY dbo.costoTotal(rderID) c
GROUP BY o.EmployeeID
) res
INSERT INTO @table_resultado
SELECT o.EmployeeID, e.FirstName, @max_monto
FROM Orders o
JOIN Employees e ON o.EmployeeID = e.EmployeeID
GROUP BY o.EmployeeID, e.FirstName
RETURN
END
Pero al ejecutarla:
SELECT * FROM dbo.Maxima_Ventas
Obtengo el resultado correcto en la columna "Monto_total"
Pero me salen los registros de todos los empleados y sus ID:
idEmpleado Primer_Nombre Monto_Total
1 Andrew 232890.84
2 Janeth 232890.84
3 Margaret 232890.84
4 Steven 232890.84
5 Michael 232890.84
6 etc... etc...
7
8
9
Pero la respuesta que yo busco es la siguiente, correspondiente al empleado Margareth:
idEmpleado Primer_Nombre Monto_Total
3 Margaret 232890.84