2017-03-08 7 views
0

私はExamResultテーブル、2関数、および以下に示すクエリを持っています。関数の戻り値をSQL関数のその他の関数のパラメータとして渡します。

ufn_Averagemarksにufn_Totalmarks関数の戻り値をパラメータとして渡して、学生の平均マークを取得したいが、エラー "無効な列名 'Totalmarks'が返されます。

関数2をパラメータとして関数1を渡すことはできますが、複雑な関数とクエリの実行が非常に遅いため、私の実際のケースでは実行したくありません。

これは私が質問するために作成したデモの例です。画像の下として

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

あなたは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; 
関連する問題