제목으로 표현하기가 어렵네요;;;
간략히 그래프로 설명드리면요,
B컬럼 C컬럼
1 1
1 2
2 1
3 1
3 2
3 3
4 1
4 2
5 1
5 2
5 3
5 4
5 5
원래는 A컬럼이 없는 경우 위와같이 "ORDER BY B컬럼, C컬럼" 으로 정렬되는데요
A컬럼 B컬럼 C컬럼
1 1
1 1 2
2 1
1 3 1
3 2
3 3
4 1
2 4 2
2 5 1
5 2
5 3
2 5 4
5 5
그런데 위와 같이 A컬럼이 생성되었고 아래와 같이 정렬을 해야합니다..
A컬럼 B컬럼 C컬럼
1 1
1 1 2
1 3 1
2 1
3 2
3 3
4 1
2 4 2
2 5 1
2 5 4
5 2
5 3
5 5
즉, 기존대로 "ORDER BY B컬럼, C컬럼" 정렬을 유지하되
A컬럼 묶음 값이 있을 경우 해당 묶음 값을 가진 데이터를 바로 다음으로 정렬되게 하여야합니다..
조회 범위에 몇개가 있든 이어서 가져와야합니다.(같은 묶음안에서는 물론 "ORDER BY B컬럼, C컬럼" 정렬순)
일단 기존 쿼리에 OPTION 구문이 있어서 밖에서 다시 묶어서 처리한다던가 하는 방법은 어려운 상황입니다..
쿼리로 구현이 불가능하다면 비지니스단에서 처리해야 하는데 그럼 작업이 너무 많아져서
되도록이면 쿼리에서 해결해 보려고 합니다;;;
해당 구현이 가능은 할까요??
고수님들의 고견 부탁 드리겠습니다.
Comment 1
-
권오현_276823
2013.07.08 09:28
자답합니다.
원쿼리는 아무리 생각해봐도 알 수가 없어서 임시 테이블을 이용하여 해결 하였습니다.
쿼리를 직접 옮기기는 그렇고 간략히 설명하자면,
"임시테이블1" 에 조회 할 데이터를 담고
declare @i int
set @i = 1 (테이블에 ROW_NUMBER() 을 줬기에 매핑위해 1부터 시작)
while @i < @V_TABLE_CNT(총 데이터 수) + 1
BEGIN
[[[ 이곳에서 조건처리하여 "임시테이블2" 에 정렬시킬 순으로 데이터를 입력 하였습니다 ]]]
END
최종단계에서 정렬처리된 "임시테이블2" 을 select 함으로써 처리하였네요.
전문적으로 하시는분들에게 원쿼리로 해결할 수 있는 더 좋은 방법이 있을 것 같은데 시간의 압박으로 저는 위와같이 처리했습니다^^;;
혹시라도 저와 비슷한 상황의 분들에게 도움되실까 해서 댓글 남겼습니다.