我正在尝试使用标量函数,该函数将employeeID
作为参数并返回该员工的总销售额。
不幸的是,我的代码不断返回总数但是多次,表中的每个employeeID
实例一次。我如何让我的函数返回一个值?
ALTER FUNCTION dbo.ufnEmployeeRevenue (@employeeID INT)
RETURNS MONEY
AS
BEGIN
DECLARE @total MONEY
SELECT DISTINCT @total = SUM(S.Total)
FROM tblSale S
WHERE S.EmployeeID = @employeeID
RETURN @total
END
SELECT dbo.ufnEmployeeRevenue(EmployeeID)
FROM tblSale
WHERE EmployeeID = 1
[enter image description here][1]
答案 0 :(得分:2)
您的通话有误,您只需要传递ID
号码:
select dbo.ufnEmployeeRevenue(1);
当您将1
(或任何ID号)传递给该函数时,它将在其中运行代码:
SELECT DISTINCT @total = SUM(S.Total)
FROM tblSale S
WHERE S.EmployeeID = 1 --@employeeID
最后,它将为您返回最终结果。
有关functions
的详细信息,请参阅 Create User-defined Functions ,其中包含示例。
答案 1 :(得分:0)
我建议将该标量函数转换为内联表值函数。它比标量函数更快,更灵活。这是与内联表值函数相同的逻辑。
ALTER FUNCTION dbo.ufnEmployeeRevenue (@employeeID INT)
RETURNS TABLE
AS
RETURN
SELECT TotalMoney = SUM(S.Total)
FROM tblSale S
WHERE S.EmployeeID = @employeeID
GO
SELECT m.TotalMoney
FROM tblSale s
cross apply dbo.ufnEmployeeRevenue(EmployeeID) m
WHERE EmployeeID = 1