기초 조회 쿼리 질문드려요. 0 5 640

by 질문자 [Oracle 기초] [2020.10.07 08:33:30]


안녕하세요.

1개 컬럼에 'A', 'B', 'C' 3가지 데이터 코드가 있습니다.

기본키값를 가지는 데이터는 3가지 데이터코드를 모두 가질 수 도 있고, 1개,2개만 가질 수도 있어요.

--------------------------------------------------------

ex)

SELECT *

FROM TABLE

WHERE  기본키 = 구루비

-->

구루비 A 010-1111-1111

구루비 C 010-1111-1111

--------------------------------------------------------

해당 컬럼에 데이터코드가 'C'가 있으면 C가 속한 행만 보여주고,

없으면, A,B가 속한 행을 보여주고 싶어요.

위에 예제의 경우라면 구루비 C 010-1111-1111 만 보여주고 싶어요.

어떻게 하면되나요 ? 알려주세요. 감사합니다.

by 마농 [2020.10.07 08:38:00]

C 가 없으면 A,B 둘다 보여주나요?
아니면 C > B > A 순차적으로 하나만 보여주나요?


by 질문자 [2020.10.07 08:43:47]

C가없으면 A,B둘다 보여줘요.


by 마농 [2020.10.07 08:52:45]
WITH t AS
(
SELECT 'gurubee' gb, 'A' cd, '1111' v FROM dual
UNION ALL SELECT 'gurubee', 'C', '1111' FROM dual
UNION ALL SELECT 'GURUBEE', 'A', '1111' FROM dual
UNION ALL SELECT 'GURUBEE', 'B', '1111' FROM dual
)
SELECT *
  FROM (SELECT gb, cd, v
             , RANK() OVER(PARTITION BY gb ORDER BY DECODE(cd, 'C', 1, 2)) rk
          FROM t
        -- WHERE gb = 'gurubee'
        )
 WHERE rk = 1
;

 


by 질문자 [2020.10.08 10:01:11]

답변 감사드립니다.

만약에, A,B,C 외에 추가로 여러 데이터코드(D~Z)가 있다고 한다면

C가있으면 A,B를 제외한 C포함 나머지를 같이 보여주고,

C가없으면 A,B를 포함한 나머지를 같이 보여주고자 한다면 어떻게하나요 ?


by 마농 [2020.10.08 10:59:30]

- 변경전 : WHERE rk = 1
- 변경후 : WHERE rk = 1 OR cd > 'C'

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