扩展SQL函数的功能性
我有一个函数,它返回在特定课程上工作的员工的成本,该课程可以有一个或多个实验室助理和一个或多个员工个人,只要只有一个员工和一个助理在特定课程上工作,该代码就可以正常工作,我想让它适用于任何数量的员工和助理,如何扩展此功能以获得该功能扩展SQL函数的功能性,sql,sql-server,sql-function,Sql,Sql Server,Sql Function,我有一个函数,它返回在特定课程上工作的员工的成本,该课程可以有一个或多个实验室助理和一个或多个员工个人,只要只有一个员工和一个助理在特定课程上工作,该代码就可以正常工作,我想让它适用于任何数量的员工和助理,如何扩展此功能以获得该功能 ALTER FUNCTION [dbo].[getCourseCost] ( @CourseCode varchar(50), @Year nchar(10), @Period nchar(10) ) RETURNS int AS BEGIN
ALTER FUNCTION [dbo].[getCourseCost]
(
@CourseCode varchar(50),
@Year nchar(10),
@Period nchar(10)
)
RETURNS int
AS
BEGIN
DECLARE @SSN_staff varchar(50)
DECLARE @Salary_staff int
DECLARE @Hours_staff int
DECLARE @Cost_staff int
DECLARE @Cost_labass int
SELECT @SSN_staff = SSN FROM Attended_By WHERE Period = @Period AND Year = @Year AND CourseCode = @CourseCode
SELECT @Salary_staff = Salary FROM Staff WHERE SSN = @SSN_staff
SELECT @Hours_staff = Hours FROM Attended_By WHERE Period = @Period AND Year = @Year AND CourseCode = @CourseCode
SELECT @Cost_labass = (Hours * Salary) FROM Labass WHERE Period = @Period AND Year = @Year AND CourseCode = @CourseCode
SET @Cost_staff = @Salary_staff * @Hours_staff
IF @Cost_staff is NULL
BEGIN
SET @Cost_staff = 0
END
IF @Cost_labass is NULL
BEGIN
SET @Cost_labass = 0
END
RETURN @Cost_staff + @Cost_labass
END
我不得不根据您的代码对您的表格进行一些假设,因为我不清楚它们是什么,但假设
参加人数是一名员工在课程上的小时数,员工。工资
决定了员工每小时的成本,以下查询应为您提供课程所有员工的单一成本:
SELECT @Cost_Staff = SUM(A.Hours * S.Salary)
FROM Attended_By A
INNER JOIN Staff S ON S.SSN = A.SSN
WHERE (Period = @Period AND
Year = @Year AND
CourseCode = @CourseCode)
这将每个工作人员的所有工作时间之和乘以他们各自的工资。
使用上述方法,您可以省去所有三个选择@SSN\u staff
、@Salary\u staff
和@Hours\u staff
我相信,如果您使用SUM
函数,您用于实验室助理的查询应该已经返回了总数:
SELECT @Cost_labass = SUM(Hours * Salary)
FROM Labass
WHERE (Period = @Period AND
Year = @Year AND
CourseCode = @CourseCode)
虽然我可能可以从上面的代码中猜出答案,但为了更容易回答这个问题,您可能需要定义表由
、员工
和Labass
参与的内容,以及这些列的含义。是的,这是正确的,非常感谢您的快速回答。