我有一个ExamResult表,2个函数和一个我在下面的查询。
我想将ufn_Totalmarks函数的返回值作为参数传递给ufn_Averagemarks以获得学生的平均分数,但它给出错误“无效的列名''Totalmarks'。”
我可以做这个事情将函数1作为参数传递给函数2但是在我的实际情况下我不想这样做,因为它的复杂函数和查询执行非常慢。
这只是我创建一个问题的演示示例。
ExamResult表数据如下图:
功能:
CREATE FUNCTION [dbo].[ufn_Totalmarks]
(
@Marks1 int,
@Marks2 int
)
RETURNS int
AS
BEGIN
-- Declare the return variable here
DECLARE @Result int
SELECT @Result = @Marks1 + @Marks2
return @Result
END
GO
CREATE FUNCTION [dbo].[ufn_Averagemarks]
(
@TotalMarks int
)
RETURNS int
AS
BEGIN
-- Declare the return variable here
DECLARE @Result int
SELECT @Result = @TotalMarks/2
return @Result
END
GO
查询:
Select [dbo].[ufn_Totalmarks](Marks1,Marks2) as Totalmarks, [dbo].[ufn_Averagemarks](Totalmarks) as AvgMarks, * from ExamResult
答案 0 :(得分:1)
您可以使用Common table expression或子查询执行此操作。
公用表格式
WITH CTE AS (
SELECT ID, StudentID, Marks1, Marks2, dbo.ufn_TotalMarks(Marks1, Marks2) AS TotalMarks
FROM dbo.ExamResult
)
SELECT ID, StudentID, Marks1, Marks2, TotalMarks, dbo.ufn_Averagemarks(TotalMarks) AS AvgMarks
FROM CTE;
<强>子查询强>
SELECT ID, StudentID, Marks1, Marks2, TotalMarks, dbo.ufn_Averagemarks(TotalMarks) AS AvgMarks
FROM (
SELECT ID, StudentID, Marks1, Marks2, dbo.ufn_TotalMarks(Marks1, Marks2) AS TotalMarks
FROM dbo.ExamResult
) AS subquery;