개발/SQL

[mssql] where문에 in으로 서브쿼리를 통해 검색 기능 구현하기 + where case

카레공 2023. 1. 6. 15:48

이번에 내가 해결했어야 했던 문제는 

예로 들자면  

회사의 대표번호를 검색해야 해당 회사가 출력되던 기능을 

한 회사의 저장되어 있는 임의의 전화번호를 검색 시 해당 회사출력 될 수 있게 기능을 수정하는 것과 같았다 

 

그래서 생각해 낸 방법은 

1. 회사의 모든 연락처를 조인해오고 회사이름으로 GROUPBY 하기

2. where문에서 서브쿼리로 모든 연락처테이블을 참조해서 불러오기 

 

1번 방법은 나중에 쿼리를 수정할 때를 전체 테이블을 groupby 하는건 불편할 것 같고 느리기 때문에 

2번 방법을 적용하기로 했다.

 

>>>where문에서 서브쿼리로 모든 연락처테이블을 참조해서 불러오기 

where  a.iw_pay_no in (
			select r1.iw_pay_no
			from (
				select case WHEN ip2.multi_iw_yn='Y' Then IR.IW_No else ip2.iw_no  End as iw_no ,ip2.IW_Pay_No--,ir.Seq
				FROM TB_IW_PAY ip2 WITH(NOLOCK, READUNCOMMITTED) 
				LEFT outer JOIN TB_IW_PAY_REF ir WITH(NOLOCK, READUNCOMMITTED) on ip2.iw_pay_no=ir.IW_Pay_No 
			)as r1
			where r1.iw_no LIKE ISNULL(s.iw_no, '')+'%'  
			group by r1.iw_pay_no
)

위 쿼리를 설명하자면 

회사의 연락처가 여러개라고 할 때 TB_IW_PAY_REF가 생성되는데

연락처가 여러개라고 알려주는 컬럼이 mulit_iw_yn이다 

따라서 multi_iw_yn ='Y' 일때는 REF테이블에서 번호를 참조하고 N일때는 대표번호를 검색할 수 있게 구문을 짰다.

 

그리고 s.iw_no이 검색 테이블인데 해당 연락처를 조회할 시에 

중복되는 회사 no을 없애기 위해 groupby를 해주었다.