SQL Server:用户定义的函数,返回与employeeID

时间:2017-11-20 21:11:28

标签: sql-server

我正在尝试使用标量函数,该函数将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]

Output

2 个答案:

答案 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