with t as
(
select '1' no_seq, 'a' da from dual union all
select '1' no_seq, 'b' da from dual union all
select '2' no_seq, 'a' da from dual union all
select '3' no_seq, 'a' da from dual union all
select '3' no_seq, 'b' da from dual union all
select '4' no_seq, 'a' da from dual union all
select '5' no_seq, 'a' da from dual union all
select '5' no_seq, 'b' da from dual union all
select '6' no_seq, 'b' da from dual
)
select
no_seq, da
from t
WHERE no_seq <= '5'
--OR (no_seq = '5' AND da <> 'b') ?
5이하의 숫자만 가져오는데
이때 숫자가 5이면서 b는 제거하고 나머지만 가지고오고싶어요!
no_seq 의 자료형이 문자 맞나요? 혹시 숫자 아닌지?
- 숫자라면? 따옴표가 없어야 하구요.
- 문자라면? 자리수가 1자리만 있지는 않을 듯 한데요?
- 가변 자리수라면? 문자 '20' 이 '5' 보다 작습니다.
- 이부분 감안하셔야 합니다.
- 문자인 경우 어떤 결과가 나와야 하는지요?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | -- 숫자라고 가정하고 풀어 보면 -- WITH t AS ( SELECT 1 no_seq, 'a' da FROM dual UNION ALL SELECT 1, 'b' da FROM dual UNION ALL SELECT 2, 'a' da FROM dual UNION ALL SELECT 3, 'a' da FROM dual UNION ALL SELECT 3, 'b' da FROM dual UNION ALL SELECT 4, 'a' da FROM dual UNION ALL SELECT 5, 'a' da FROM dual UNION ALL SELECT 5, 'b' da FROM dual UNION ALL SELECT 6, 'b' da FROM dual ) SELECT * FROM t WHERE no_seq <= 5 AND NOT (no_seq = 5 AND da = 'b' ) -- NOT 이용 AND (no_seq != 5 OR da != 'b' ) -- NOT 을 괄호 안으로 풀어서 넣으면 ; |