WITH t AS
(SELECT 'A' CODE, NULL rate FROM dual UNION ALL
SELECT 'F', 22 FROM dual UNION ALL
SELECT 'P', 11 FROM dual)
SELECT *
FROM t
위와 같은 sample의 경우
우선순위 A > F > P
즉, code 값 A의 rate가 존재하면 A의 rate를
F rate가 존재하면 F의 rate를
그마저도 없으면 P의 rate를 사용하고저 합니다.
Grouping과 Order를 어떤식으로 해야 하나의 값으로 떨어질수 있을까요...
WITH t AS (SELECT 'A' CODE, null rate FROM dual UNION ALL SELECT 'F', 22 FROM dual UNION ALL SELECT 'P', 11 FROM dual) SELECT rate FROM ( SELECT t.*, ROW_NUMBER() OVER(ORDER BY code) cnt FROM t WHERE rate IS NOT NULL ) WHERE cnt = 1
SELECT RATE FROM ( SELECT RATE FROM t WHERE RATE IS NOT NULL ORDER BY CODE ) WHERE ROWNUM = 1 SELECT MAX(RATE ) KEEP (DENSE_RANK FIRST ORDER BY CODE) RATE FROM t WHERE RATE IS NOT NULL