안녕하세요.. 오라클 쿼리에 대하여 문의 드리고자 합니다. 도움을 주시길 부탁 드립니다
값이 다른 케이스는 제외하고자 합니다. (단, 케이스값 > 0 값 기준으로 함)아래의 결과의 자료를 추출 하고자 합니다
<원천 데이터 >
| 구분 | case 1 | case2 | case3 | case4 | case5 |
| A | 0 | 0 | 0 | 0 | 40 |
| B | 0 | 0 | 23 | 0 | 0 |
| C | 0 | 0 | 33 | 0 | 0 |
| D | 0 | 25 | 0 | 0 | 0 |
< 결과 > B/C 구분의 case3 위아래 다른 값을 가지고 있으므로 제외 됨
| 구분 | case1 | case2 | case3 | case4 | case5 |
| A | 0 | 0 | 0 | 0 | 40 |
| D | 0 | 25 | 0 | 0 | 0 |
데이터의 특징을 알려주세요.
5개 case 중 하나만 값이 들어 오는 것인지? 여러개 들어올 수 있는지?
어떤 목적으로 쿼리를 작성하는 것인지?
C 의 case 가 만약 23 이라면? 제외되지 않는 건가요?
누락된 내용을 콕 집어주시니 정말 감사합니다.
동일 Case에 두개 이상의 값이 서로 상이 할 경우 제외 하기 위함입니다.
C의 case가 만약 23이라면 제외 여부? 제외 되지 않습니다.(B의 case와 값과 동일 하므로..)
WITH t AS
(
SELECT 'A' gb, 0 c1, 0 c2, 0 c3, 0 c4, 40 c5 FROM dual
UNION ALL SELECT 'B', 0, 0, 23, 0, 0 FROM dual
UNION ALL SELECT 'C', 0, 0, 33, 0, 0 FROM dual
UNION ALL SELECT 'D', 0, 25, 0, 0, 0 FROM dual
)
SELECT a.*
FROM t a
, (SELECT gb, c, v
, COUNT(DISTINCT v) OVER(PARTITION BY c) cnt
FROM t
UNPIVOT (v FOR c IN (c1, c2, c3, c4, c5))
WHERE v > 0
) b
WHERE a.gb = b.gb
AND b.cnt = 1
;
많은 도움이 되었습니다. 답변 감사드립니다.