안녕하십니까.
tree구조 쿼리 중 sort 문제가 생겨 질문 드립니다.
table 구조
table명 : t_tree
---------------------------------------------------
doc_no | parent_doc_no | sort
---------------------------------------------------
doc_0001 | null | 1
doc_00010001 | doc_0001 | 1
doc_00010002 | doc_0001 | 2
doc_000100010001 | doc_00010001 | 1
doc_000100020001 | doc_00010002 | 1
doc_0002 | null | 2
doc_00020001 | doc_0002 | 1
doc_00020002 | doc_0002 | 2
doc_000200010001 | doc_00020001 | 1
doc_000200020001 | doc_00020002 | 1
---------------------------------------------------
위와같은 구조로 되어있구요
sort컬럼의 생성규칙은 해당 depth의 순번입니다.
해당 쿼리는 아래와 같습니다.
-------------------------------------------------------------------------------------------
with cte(doc_no,parent_doc_no,lvl,sort_cd,sort)
as
(
select doc_no,parent_doc_no,1 as lvl, convert(varchar(max),doc_no),sort
from t_tree with(nolock)
where parent_no is null
union all
select a.doc_no, a.parent_doc_no, lvl+1 as lvl, convert(varchar(max),sort_cd+' '+a.doc_no),a.sort
from t_tree a with(nolock), cte b
where a.parent_doc_no = b.doc_no
)
select *
from cte
order by sort_cd,sort
--------------------------------------------------------------------------------------------
문제는, 위와 같은 쿼리로 작성 시
lvl별로 sorting은 가능하나 sort 컬럼별로는 sorting이 어렵습니다.
sort컬럼은 사용자가 직접 입력하는 필드로 sort별 sorting 가능하게 하려면
어떤방법을 써야할까요?
doc_no 생성규칙을 바꿔야 할 지 sort 컬럼 입력 규칙을 바꿔야 할 지
아니면 저 방법대로 쿼리에서 가능한지 고수님들의 답변 부탁드립니다.~~
|