아래와 같이 테이블의 결과가 나올라면 어떻게 해야할까요;;;
머리가 쿼리쪽으로는 안돼어서 고생이네요 ㅠㅠ
주석도 작성해주시면 감사합니다.
A-table | B-table | |||||||
필드명 | no | name | 필드명 | no | NAME | NUM | ||
데이터 | 1 | A | 데이터 | 1 | A | 1 | ||
2 | A | 2 | A | 1 | ||||
3 | A | 4 | B | 1 | ||||
4 | B | 5 | B | 1 | ||||
5 | B | 6 | C | 1 | ||||
6 | C | 8 | C | 2 | ||||
7 | C | 9 | C | 2 | ||||
8 | C | |||||||
9 | C | |||||||
결과 | ||||||||
필드명 | no | NAME | NUM | Check | ||||
데이터 | 1 | A | 1 | N | ||||
2 | A | 1 | N | |||||
3 | A | N | ||||||
4 | B | 1 | Y | |||||
5 | B | 1 | Y | |||||
6 | C | 1 | N | |||||
7 | C | N | ||||||
8 | C | 2 | N | |||||
9 | C | 2 | N |
WITH tab_a AS ( SELECT 1 no, 'A' name FROM dual UNION ALL SELECT 2, 'A' FROM dual UNION ALL SELECT 3, 'A' FROM dual UNION ALL SELECT 4, 'B' FROM dual UNION ALL SELECT 5, 'B' FROM dual UNION ALL SELECT 6, 'C' FROM dual UNION ALL SELECT 7, 'C' FROM dual UNION ALL SELECT 8, 'C' FROM dual UNION ALL SELECT 9, 'C' FROM dual ) , tab_b AS ( SELECT 1 no, 'A' name, 1 num FROM dual UNION ALL SELECT 2, 'A', 1 FROM dual UNION ALL SELECT 4, 'B', 1 FROM dual UNION ALL SELECT 5, 'B', 1 FROM dual UNION ALL SELECT 6, 'C', 1 FROM dual UNION ALL SELECT 8, 'C', 2 FROM dual UNION ALL SELECT 9, 'C', 2 FROM dual ) SELECT a.no , a.name , b.num , MIN(NVL2(b.num, 'Y', 'N')) OVER(PARTITION BY a.name) chk FROM tab_a a , tab_b b WHERE a.no = b.no(+) -- AND a.name = b.name(+) -- 이 조건이 필요할지 아리송? ORDER BY no ;