안녕하세요?
도저히 생각이 나질 않아서 선배님들께 질문 올립니다.
MSSQL 2012 버전입니다.
필드가 총 4개 있습니다.
id int, (자동증가)
cnt int,
juso Varchar(100),
phone varchar(20)
각각의 필드에는 대략 이런 내용이 들어있습니다.
id cnt juso phone
1 0 서울시 성북구.... 010-0000-0000
2 0 서울시 강남구...... 010-1111-1111
3 0 서울시 강동구......... 010-0000-1111
4 0 인천시 남구........... 010-0000-1100
5 0 인천시 남구........... 010-9990-0000
6 0 부산시 해운대구...... 010-9992-9992
7 0 부산시 북구.............. 010-8888-8888
8 0 제주시 서귀포구....... 010-9997-7777
9 0 제주시 서귀포구...... 010-6666-6666
이런식의 데이터가 각 필드마다 있는데 제가 하고 싶은거는
한번 쿼리를 할때 마다 5개씩의 값을 가져오되 cnt가 0 이고 juso 필드 앞 3자리 (시구분자)가 겹치지 않게 가져온 후 작업이 완료되면 cnt를 1로 올려주고 싶습니다. (cnt를 1로 올려주는 작업은 별도 작업이라 가져오는 쿼리만 있으면 됩니다.)
이번 쿼리에서 juso중 3번째 자리까지인 '시'가 중복되지 않게 5개씩 가져오는 작업이 필요합니다.
가져와야 될 필드는 id, cnt, juso, phone 즉 모든 필드를 다 가져와야되구요
간단한거 같으면서도 헷갈리네요
선배님들
많은 가르침 부탁드립니다.
감사합니다.
Comment 2
-
자리비움
2017.11.27 14:43
WITH T1 AS
(
SELECT ID = 1, CNT = 0, JUSO = '서울시 성북구' , PHONE = '010-0000-0000' UNION ALL
SELECT ID = 2, CNT = 0, JUSO = '서울시 강남구' , PHONE = '010-1111-1111' UNION ALL
SELECT ID = 3, CNT = 0, JUSO = '서울시 강동구' , PHONE = '010-0000-1111' UNION ALL
SELECT ID = 4, CNT = 0, JUSO = '인천시 남구' , PHONE = '010-0000-1100' UNION ALL
SELECT ID = 5, CNT = 0, JUSO = '인천시 남구' , PHONE = '010-9990-0000' UNION ALL
SELECT ID = 6, CNT = 0, JUSO = '부산시 해운대구', PHONE = '010-9992-9992' UNION ALL
SELECT ID = 7, CNT = 0, JUSO = '부산시 북구' , PHONE = '010-8888-8888' UNION ALL
SELECT ID = 8, CNT = 0, JUSO = '제주시 서귀포구', PHONE = '010-9997-7777' UNION ALL
SELECT ID = 9, CNT = 0, JUSO = '제주시 서귀포구', PHONE = '010-6666-6666' UNION ALL
SELECT ID = 10, CNT = 0, JUSO = '경기도 용인시 수지구', PHONE = '010-6666-6666' UNION ALL
SELECT ID = 11, CNT = 0, JUSO = '경기도 광주시 오포읍', PHONE = '010-1111-1111' UNION ALL
SELECT ID = 12, CNT = 0, JUSO = '경기도 하남시 광암동', PHONE = '010-2222-2222' UNION ALL
SELECT ID = 13, CNT = 0, JUSO = '경기도 하남시 교산동', PHONE = '010-3333-3333'
)
SELECT *
FROM (
SELECT TOP 5
ID = MIN(ID)
, SI
FROM (
SELECT *
, SI = LTRIM(REPLACE(SUBSTRING(JUSO,0,CHARINDEX('시',JUSO)+1),SUBSTRING(JUSO,0,CHARINDEX('도',JUSO)+1),''))
FROM T1
WHERE CNT = 0