create table a_vin (f1 varchar2(4) );
f1 컬럼 값에 0001, 0002, 0003 ... 1000 이라는 데이터가 있다고 가정할 때
최초2, 최종2 개의 데이터만 표출하려고 합니다.
SELECT *
FROM (SELECT *
FROM (SELECT F1
FROM A_VIN
ORDER BY F1)
WHERE ROWNUM <= 2
UNION ALL
SELECT *
FROM (SELECT F1
FROM A_VIN
ORDER BY F1 DESC)
WHERE ROWNUM <= 2)
ORDER BY F1;
이런식으로 쿼리를 짜서 결과값을 아래와 같이 표기했는데
| F1 |
| 001 |
| 002 |
| 009 |
| 010 |
아래와 같이 나오기를 원하는데 어떤식으로 짜야할 지 문의드립니다.
최초2개, 최종2개 값은 고정입니다.
| F1 | F2 |
| 001 | 009 |
| 002 | 010 |
WITH a_vin AS
(
SELECT '001' f1 FROM dual
UNION ALL SELECT '002' FROM dual
UNION ALL SELECT '003' FROM dual
UNION ALL SELECT '009' FROM dual
UNION ALL SELECT '010' FROM dual
)
SELECT a.f1
, b.f2
FROM (SELECT ROWNUM rn
, f1
FROM (SELECT f1 FROM a_vin ORDER BY f1)
WHERE ROWNUM <= 2
) a
, (SELECT ROWNUM rn
, f1 f2
FROM (SELECT f1 FROM a_vin ORDER BY f1 DESC)
WHERE ROWNUM <= 2
) b
WHERE a.rn != b.rn
ORDER BY a.rn
;
와우...감탄이 절로 나오네요..^^
감사합니다.
where 절은 오타인 듯 하네요 a.rn = b.rn
오타 아닙니다.
부정비교 (!=) 맞습니다.
1 은 2 와 연결, 2 는 1 과 연결