#title 정렬문제1 ==== 문제 ==== 데이터가 이 모양이다. {{{ seq h 1 중분류1 2 소분류1 3 소분류2 4 소분류3 5 중분류2 6 소분류4 7 중분류3 8 소분류5 }}} 아래와 같은 결과를 얻고 싶다. {{{ seq h 2 소분류1 3 소분류2 4 소분류3 1 중분류1 6 소분류4 5 중분류2 8 소분류5 7 중분류3 }}} --질문 출처: http://www.sqler.com/bSQLQA/745455 ==== 문제 분석 ==== RDB의 특징 중에 하나가 투플의 무순서다. 즉, 순서는 relationship 아니다. 제대로 되려면 relationship에 대한 데이터가 있어야 한다. 위의 예제로 본다면 소분류1, 소분류2, 소분류3는 중분류1과의 relationship이 데이터로 존재하여야 한다. 그런데도 불구하고 굳이 어거지로 해보겠다면 중분류 식별이 가능하다는 가정하에 다음과 같이 해볼 수 있다. ==== SQL ==== 데이터 만들기 {{{ select 1 seq, '중분류1' h into #temp union all select 2, '소분류1' union all select 3, '소분류2' union all select 4, '소분류3' union all select 5, '중분류2' union all select 6, '소분류4' union all select 7, '중분류3' union all select 8, '소분류5' }}} {{{ ;with new_idx as ( select h , seq , isnull(lead(seq, 1) over(order by seq), 99999) - 0.5 new_seq from #temp where h like '중%' ) select a.seq , a.h from #temp a left join new_idx b on a.seq = b.seq order by isnull(b.new_seq, a.seq) }}}