매개변수 숫자 4개를 받아서 1,2,3,4 순위별로 값을 가지고 오려면 함수 구현을 어떻게 하면 될까요? 0 2 1,397

by 김대영 [SQL Query] [2017.07.29 18:45:13]


매개변수 숫자 4개를 받아서 1,2,3,4 순위별로 값을 가지고 오려면 함수 구현을 어떻게 하면 될까요?

아무리 고민해도 답이 안 나오네요...

 


EX) 

구분자 1,2,3,4 순위에 따른 값 리턴.

SELECT F_함수(1,3,22,1, '1' ) AS 결과1 
      ,F_함수(1,3,22,1, '2' ) AS 결과2 
      ,F_함수(1,3,22,1, '3' ) AS 결과3 
      ,F_함수(1,3,22,1, '4' ) AS 결과4          
  FROM DUAL

결과1    결과2    결과3    결과4
=====================================
  1        1        3        22 

 

by 마농 [2017.07.31 08:34:01]
CREATE OR REPLACE FUNCTION f_test
(n1 NUMBER, n2 NUMBER, n3 NUMBER, n4 NUMBER, n_seq NUMBER)
RETURN NUMBER IS
    n_rtn NUMBER;
BEGIN
    SELECT n
      INTO n_rtn
      FROM (SELECT n
                 , ROW_NUMBER() OVER(ORDER BY n) rn
              FROM (SELECT n1 n FROM dual
                    UNION ALL SELECT n2 FROM dual
                    UNION ALL SELECT n3 FROM dual
                    UNION ALL SELECT n4 FROM dual
                    )
            )
     WHERE rn = n_seq
    ;
    RETURN n_rtn;
END;
/

 


by 마농 [2017.07.31 11:22:57]

사용자 함수 사용하는 것이 비효율적이네요.
함수 없이 SQL 만으로 구현하는게 나을 듯 하네요.
 

SELECT *
  FROM (SELECT n
             , ROW_NUMBER() OVER(ORDER BY n) rn
          FROM (SELECT  1 n1
                     ,  3 n2 
                     , 22 n3
                     ,  1 n4
                  FROM dual
                )
         UNPIVOT (n FOR gb IN (n1, n2, n3, n4))
        )
 PIVOT (MIN(n) FOR rn IN (1, 2, 3, 4))
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입