2017-03-08 1 views
0

Ich habe eine ExamResult-Tabelle, 2 Funktion und eine Abfrage, die ich unten setzen.übergeben Sie den Rückgabewert der Funktion als Parameter an andere Funktion in SQL-Abfrage

Ich möchte den Rückgabewert von ufn_Totalmarks als Parameter an ufn_Avermarks übergeben, um die durchschnittlichen Noten des Schülers zu erhalten, aber es gibt den Fehler "Ungültiger Spaltenname 'Totalmarks'."

Ich kann dies tun, um Funktion eins als Parameter zu Funktion 2 zu übergeben, aber in meinem realen Fall möchte ich dies nicht tun, weil es eine komplexe Funktionen und Abfrageausführung ist sehr langsam.

Dies ist nur ein Demo-Beispiel, das ich erstellt habe, um eine Frage zu stellen.

ExamResult Tabellendaten wie unten Bild:

enter image description here

Funktionen:

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 

Abfrage:

Select [dbo].[ufn_Totalmarks](Marks1,Marks2) as Totalmarks, [dbo].[ufn_Averagemarks](Totalmarks) as AvgMarks, * from ExamResult 

Antwort

1

Sie können dies mit einem Common table expression oder einer Unterabfrage.

Allgemeine Tabellen Ausdruck

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; 

Subquery

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; 
Verwandte Themen