2
CREATE FUNCTION Salary.SecondHighestSalary()

Returns int

AS 

    BEGIN
    Declare @salary int;

  SELECT TOP 1 salary FROM (

  SELECT TOP 2 salary FROM Salary
  ORDER BY salary DESC
) as maxsalary ORDER BY salary ASC

Return @salary  
END

みなさん、こんにちは。上記の構文を使用して 2 番目に高い給与を取得する SQL 関数を作成しようとしていますが、エラーが発生しています。

"関数内に含まれる select ステートメントは、クライアントにデータを返すことができません。 "

関数を記述するための実際の構文を教えてください。または、正しい構文でコードを元に戻してください。前もって感謝します。

4

2 に答える 2

1

私は次のように使用しROW_NUMBER()ています:

CREATE FUNCTION SecondHighestSalary()

Returns int

AS 
begin
    Return (
      select salary from (
         select salary,ROW_NUMBER() OVER (ORDER BY salary desc) as rn
         from Salary
        ) t
      where rn = 2);
END

これにより、andアプローチがあまり受け入れられない、たとえば (必要に応じて切り替えRANKたり)関係に対処する必要がある場合にも、簡単に適応させることができます。DENSE_RANKTOPORDER BY

于 2013-04-17T07:24:21.937 に答える
0
CREATE FUNCTION Salary.SecondHighestSalary()

Returns int

AS 

    BEGIN
    Declare @salary int;

  SELECT TOP 1 @salary = salary FROM (

  SELECT TOP 2 salary FROM Salary
  ORDER BY salary DESC
) as maxsalary ORDER BY salary ASC

Return @salary  
END
于 2013-04-17T07:18:38.920 に答える