새우편번호가 필요해 적용하려하는데 찾아보니 1000만건이 넘는 데이터가 있네요
데이터가 너무 방대하고 커서 사용할수 없어 찾다보니
범위값이 있더라구요
데이터 형식은
우편번호 도로명 주소 건물주번호(시작) 건물주번호(끝) 범위
12345 도로1 경북 1 34 1
12355 도로1 경북 22 54 2
12785 도로1 경북 50 0
19945 도로1 경북 71 34 3
55345 도로3 경북 1 34 0
범위값 설명
0 : 전체 | 도로명에 속하는 모든 건물번호가 동일한 구역번호를 가짐 |
1 : 홀수 | 도로명에 속하는 모든 홀수 건물번호가 동일한 구역번호를 가짐 |
2 : 짝수 | 도로명에 속하는 모든 짝수 건물번호가 동일한 구역번호를 가짐 |
3 : 해당주소 | 범위가 아님. 명시된 하나의 건물번호가 구역번호를 가짐 |
이렇게 되어 있습니다.
제가 갖고 있는 값은 도로명과 주소 그리고 건물주번호가 다 인데요
만약 제가 검색할 값이
(도로1 , 경북 , 50 ) 이라면 두번째와 세번째 값이 같이 들어와 우편번호는 "12355"가 나옵니다.
제가 받아와야 하는 우편번호는 12785 인데
방법이 없을까요?
Comment 1
-
minsouk
2015.08.21 10:26
뭐 이런건가요?
use tempdb
go
drop table p
go
create table p
(우편번호 varchar(10)
,도로명 varchar(50)
,주소 varchar(50)
,s int
,e int
,r int
)
go
insert into p
values
('12345', '도로1', '경북', 1 , 34 , 1 )
,('12355', '도로1', '경북', 22 , 54 , 2 )
,('12785', '도로1', '경북', 50 , null , 0 )
,('19945', '도로1', '경북', 71 , 34 , 3 )
,('55345', '도로3', '경북', 1 , 34 , 0 )
go
select top 1 우편번호
from
(
select *, 1 o from p
where 도로명 = '도로1' and 주소 ='경북' and 50 = s
union all
select *, 2 o from p
where 도로명 = '도로1' and 주소 ='경북' and 50 between s and e
) a
order by o