이러한 BOM전개의 경우는 일반적인 select 구문으로는 사실상 불가능 합니다. 저장프로시져로 하시거나 아니면 사용자정의함수를 이용하셔야 합니다. 다만, 차기버젼에서는 이러한 BOM전개를 위한 기능이 내장되어서 나오는것으로 알고있습니다. 저장프로시져로 구현된 예제는 거북엄마님의 강좌에 자세히 나와 있으니 사용자정의 함수를 사용하는 예제를 보여드리겠습니다. --drop table tbl create table tbl(org_code varchar(10), parent_code varchar(10), code_level tinyint, code_name varchar(50)) insert into tbl values('root','',0,'메인') insert into tbl values('A','root',1,'그룹1') insert into tbl values('C','A',2,'하위그룹1-1') insert into tbl values('F','C',3,'하위그룹1-1-1') insert into tbl values('G','C',3,'하위그룹1-1-2') insert into tbl values('D','A',2,'하위그룹1-2') insert into tbl values('E','A',2,'하위그룹1-3') insert into tbl values('B','root',1,'그룹2') insert into tbl values('H','B',2,'하위그룹2-1') insert into tbl values('I','B',2,'하위그룹2-2') go --drop function dbo.f1 create function dbo.f1(@start_code varchar(10)) returns @bom table (code_level tinyint, code varchar(10)) as begin declare @t table(org_code varchar(10), code_level tinyint, path varchar(50)) declare @level tinyint --set @level = 0 insert @t select org_code, code_level, org_code from tbl where org_code = @start_code select @level=code_level from tbl where org_code = @start_code while (1=1) begin insert @t select t1.org_code, t1.code_level, t2.path+t1.org_code from tbl t1 inner join @t t2 on t2.org_code = t1.parent_code where t2.code_level = @level if @@rowcount = 0 break set @level = @level + 1 end insert @bom select code_level, org_code from @t order by path asc return end go select replicate(' ', code_level * 3) + code as 코드 from dbo.f1('root') 코드 ----------- root A C F G D E B H I ---------------------------------------------------- (^-^)(^-^)(^-^)(^-^)(^-^)(^-^)(^-^)(^-^)(^-^)(^-^) ---------------------------------------------------- Happy SQLER... Have a Good Time... ---------------------------------------------------- > 박동신 님이 쓰신 글 > ---------------------------------------------------------- > OS : Microsoft Windows 2000 Server / Advanced Server > SQL : Microsoft SQL Server 2000 Standard / Enterprise Edition > > 기본적으로 아래의 레코드들은 무작위로 섞여 있으며, 다음과 같은 결과를 원하고 있습니다. > > org_code : 레코드 식별코드 > > parent_code : 부모 코드 > > code_level : 코드 레벨(depth) > > code_name : 코드 이름 > > > org_code parent_code code_level code_name > A root 1 그룹1 > C A 2 하위그룹1-1 > F C 3 하위그룹1-1-1 > G C 3 하위그룹1-1-2 > D A 2 하위그룹1-2 > E A 2 하위그룹1-3 > B root 1 그룹2 > H B 2 하위그룹2-1 > I B 2 하위그룹2-2 > > ※ 트리형으로 보여주면 다름과 같습니다. > > root > > ├ A > │ ├ C > │ │ ├ F > │ │ └ G > │ ├ D > │ └ E > └ B > ├ H > └ I > > 고수님들의 조언 부탁드립니다. > > 좋은하루 보내세요. ^-^ > > 출처 : sqler