각 필드의 타입
s_no varchar 14
fr_pg int 4
pg_cnt int 4
select s_no, fr_pg, pg_cnt from i300
where l_no = '00055'
order by 3
이 있으면
s_no에 따른 s_no, fr_pg가 조회되면 아래와 같습니다.
s_no fr_pg pg_cnt
20070010000001 0001
20070010000002 0003
20070010000003 0005
가 있을때
pg_cnt에 0070010000002의 0003에서 20070010000001의 0001를 뺀 것을 넣으려고 합니다.
20070010000003의 0005에서 20070010000002의 0003을 뺀것을 넣고 계속 처리 되게 하려는데
아래와 같이 적용하면 pg_cnt에 frpg의 이후 레코드에서 이전레코드를 가감한 값이 아닌 엉뚱한 값이 나오네요.
select a.sa_no,a.fr_pg,a.fr_pg- stuff(max(b.sa_no+convert(varchar(10),b.fr_pg)),1,14,'') pg_cnt
from idms300 a left join idms300 b on a.sa_no > b.sa_no
group by a.sa_no,a.fr_pg, a.pg_cnt
order by a.fr_pg
와 같이 하면 이상한 값이 나오는데요. 아마도 max때문인것 같은데요.
참고로 제가 가지고 있는 테이블의 sa_no는 정렬되어 있지 않고 큰값과 작은값이 섞여 있습니다.
테이블에 있는 sa_no가 정렬되어 있지 않을때는 어떻게 해줘야 하나요..
테이블의 sa_no데이터 sa_no가 정렬되어 있지 않을때는 sa_no를 빼고 아래와 같이 해도 데이터는 이상하게 나오는데요.
select a.sa_no,a.fr_pg, a.fr_pg- (max(convert(varchar(10), b.fr_pg))) pg_cnt
from idms300 a left join idms300 b on a.sa_no > b.sa_no
group by a.sa_no,a.fr_pg, a.pg_cnt
order by a.fr_pg, a.sa_no
sa_no fr_pg pg_cnt
20060011112222 18 - 981
20080010003345 24 -975
20070030022222 26 -973
stuff(max(b.sa_no+convert(varchar(10),b.fr_pg)),1,14,'') 부분이 문제인것 같은데요.
b.s_no+convert(varchar(10),b.fr_pg의 첫번째 문자부터 열네자를 삭제하고 삭제 지점에 ''를 삽입하여 만든 문자열을 반환하는 것으로 아는데요 .
비슷한 쿼리 해보신분은 답변주시면 감사드리겠습니다.
|