union ROWNUM순번 0 4 3,027

by 밍밍밍밍 [Oracle 기초] [2020.11.13 11:20:09]


20201113_111855.png (6,516Bytes)

안녕하세요.

UNION 후 REG_DATE로 정렬을 했는데

ROWNUM이 순서대로 안나와서 그런데 쿼리어디쪽을 수정해야할까요?

 

SELECT ROWNUM, a.* FROM

(
			SELECT 
				TITLE,
				REG_DATE
			FROM TABLEA
			
UNION ALL
SELECT
				TITLE,
				REG_DATE
			FROM TABLEB
			) a
			ORDER BY REG_DATE DESC

 

by pajama [2020.11.13 12:18:39]

rownum 대신 row_number 함수를 쓰시면 되겠네요~ 끝에 order by 절은 빼시고요.

SELECT ROWNUM, a.* FROM

=> select row_number () over (order by reg_date desc), a.* from


by 밍밍밍밍 [2020.11.13 13:21:26]

답변감사합니다!


by 마농 [2020.11.13 13:20:35]

동일 레벨에서 함께 기술되면 ROWNUM 이 ORDER BY 보다 먼저 수행됩니다.
ORDER BY 가 먼저 수행되도록 인라인뷰로 감싸 주세요.
분석함수 ROW_NUMBER 을 이용하는 방법도 있습니다.
 

-- 1. 인라인뷰를 이용하여 정렬부터 처리한 후 ROWNUM
SELECT ROWNUM rn
     , title
     , reg_date
  FROM (SELECT title
             , reg_date
          FROM (SELECT title, reg_date FROM table_a
                 UNION ALL
                SELECT title, reg_date FROM table_b
                )
         ORDER BY reg_date DESC
        )
;
-- 2. UNION 에서 바로 정렬 처리
SELECT ROWNUM rn
     , title
     , reg_date
  FROM (SELECT title, reg_date FROM table_a
         UNION ALL
        SELECT title, reg_date FROM table_b
         ORDER BY 2 DESC
        )
;
-- 3 ROW_NUMBER 이용
SELECT ROW_NUMBER() OVER(ORDER BY reg_date DESC) rn
     , title
     , reg_date
  FROM (SELECT title, reg_date FROM table_a
         UNION ALL
        SELECT title, reg_date FROM table_b
        )
;

 


by 밍밍밍밍 [2020.11.13 13:21:31]

답변감사합니다!

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