Ver Mensaje Individual
  #1  
Antiguo 16-05-2022
CarlosGPT CarlosGPT is offline
Registrado
 
Registrado: may 2022
Posts: 3
Reputación: 0
CarlosGPT Va por buen camino
Uso de la sentencia MAX() en UDF

Base de datos NorthWind

Buenas tardes estimados, el ejercicio que deseo realizar 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 funció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(o.OrderID) 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



De antemano les agradezco su ayuda.
Responder Con Cita