하나의 테이블에 부모와 자식 값이 있다. 이것을 조인을 사용하여 부모와 자식 값을 연결 해준다. 그리고 결과값은 아래와 같이 나와야 한다.
--------------------------------------
PIDX | LORDER | TITLE
---------------------------------------
null 1 T1
1 1 T1-1
1 2 T1-2
1 3 T1-3
null 2 T2
2 1 T2-1
2 2 T2-2
그럼 PIDX와 LORDER을 기준으로 정렬을 하고 가상의 컬럼을 하나 추가해 PIDX와 같은 겂으로 넣어주고 NULL일때만 LORDER 값을 넣어 주면 된다.
CREATE TABLE TEST1 (
[IDX] [int] IDENTITY (1, 1) NOT NULL primary key clustered,
[PIDX] [INT]NULL , ------ 부모 IDX
[LORDER] [TINYINT] NOT NULL , ----------- 동일 부모의 자식들간의 출력순서
[TITLE] [varchar] (50) NOT NULL
)
go
INSERT INTO TEST1 values(null, 1, 'T1')
INSERT INTO TEST1 values(null, 2, 'T2')
INSERT INTO TEST1 values(1, 1, 'T1-1')
INSERT INTO TEST1 values(1, 2, 'T1-2')
INSERT INTO TEST1 values(1, 3, 'T1-3')
INSERT INTO TEST1 values(2, 1, 'T2-1')
INSERT INTO TEST1 values(2, 2, 'T2-2')
go
방법
select distinct a.pidx , a.lorder, a.title, order_IDX = case a.pidx when null then a.lorder else a.pidx end
from test a
left outer join test b on b.pidx = a.lorder
order by order_idx , lorder asc