티스토리 뷰

A,B 두 테이블을 조인했을 때 특정 조건에 대응하는 B 값이 없을 때 표시하는 방법입니다.

엑셀에서 값이 없을 때는 표시 방법은 여기를 누르세요.

예를 들어

A 테이블은 시퀀스(seq), 학번(sno)이 있고

B 테이블은 학번(sno)과 총 취득학점(tot_unitget)이 있다.

 select a.seq, b.sno, b.tot_unitget
 from A a, B b
 where a.sno = b.sno(+)

처럼 조인함수를 써서 보통 표시한다.

여기서 문제 두둥~~ 2016년 이전기준으로 총 취득학점을 합해서 나타내야 하는 요청이 들어왔다.(B에 조건에 따라 값을 표시) 아래와 같이 조회 해봤다.

 select a.seq, b.sno, nvl(sum(b.tot_unitget,0)
 from A a, B b
 where a.sno = b.sno(+)
 and b.yy <>'2016'
 group by a.seq, b.sno

로 하니 3000여중 2016년이 들어온 학생(1300명)들은 아예 표시가 안되서 나온다. T.T

엑셀에서 하나하나 삭제 할 수도 없어서

 select a.seq, a.sno, c.tot_unitget
 from A a,
      (select sno, sum(tot_unitget) tot_unitget
       from B
       where yy <>'2016'
      group by sno) c
 where a.sno = c.sno(+)
 order by a.seq

를 해서 subquery를 이용해서 쿼리결과를 하나의 테이블로 만들고 그 테이블을 조인함으로서

A,B 두 테이블을 조인했을 때 특정조건에 대응하는 B 값이 없을 때 표시했다.

728x90
반응형
댓글