将函数的返回值作为参数传递给SQL Query中的Other函数

时间:2017-03-08 06:20:09

标签: sql sql-server sql-server-2008

我有一个ExamResult表,2个函数和一个我在下面的查询。

我想将ufn_Totalmarks函数的返回值作为参数传递给ufn_Averagemarks以获得学生的平均分数,但它给出错误“无效的列名''Totalmarks'。”

我可以做这个事情将函数1作为参数传递给函数2但是在我的实际情况下我不想这样做,因为它的复杂函数和查询执行非常慢。

这只是我创建一个问题的演示示例。

ExamResult表数据如下图:

enter image description here

功能:

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

1 个答案:

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