[MSSQL] 입력된 값(ROW,행) 중 몇 번째 값 가져오기 함수

2014. 3. 3. 14:12IT

MSSQL 에서 ROW단에서 몇번째로 큰 값 가져와라!! 하는 미션이 있었다.

오라클과는 다르게 MSSQL에서는 함수들이 많이 빈약하다는 것을 볼 수 있었다.



[예제 화면 1]


만약 위와 같은 상황에서 두번째로 큰 값은 90이다. 이것을 어떻게 가져올까.... 



[함수를 활용한 결과]


함수 내용은 아래와 같다.


CREATE FUNCTION [dbo].[fn_NJCHO_Greatest]
-- 기본 4개 인자 값으로 설정!!
(@IsNum1 float = null, @IsNum2 float = null, @IsNum3 float = null, @IsNum4 float = null, @Order int) 
RETURNS float
WITH EXEC AS CALLER
AS
BEGIN
DECLARE @temp TABLE (dt float)
      
    IF @IsNum1 IS NOT NULL
    BEGIN
        INSERT INTO @temp ( dt )
        SELECT @IsNum1
    END
      
    IF @IsNum2 IS NOT NULL
    BEGIN
        INSERT INTO @temp ( dt )
        SELECT @IsNum2
    END
    IF @IsNum3 IS NOT NULL
    BEGIN
        INSERT INTO @temp ( dt )
        SELECT @IsNum3
    END
      
    IF @IsNum4 IS NOT NULL
    BEGIN
        INSERT INTO @temp ( dt )
        SELECT @IsNum4
    END
 
         
    RETURN (
      
      Select
        dt
      From
      (
        SELECT
         dt
        , Row_number() Over(Order By dt Desc) As 'Rn'
        FROM @temp
      ) As x
      Where 1=1
        And Rn = @Order
        
        
    )
END
GO