Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
扩展SQL函数的功能性_Sql_Sql Server_Sql Function - Fatal编程技术网

扩展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
参与的内容,以及这些列的含义。是的,这是正确的,非常感谢您的快速回答。