태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
페이지를 읽고 있습니다. ( 아쿠아바다's Blog )
분류 전체보기 (769)
쉐어포인트 (24)
Exchange (12)
SQL (121)
XML (36)
WEB (294)
O / S (97)
삶의향기 (162)
기획 (19)
RSS 피드(IE 7.0부터 기본 지원됩니다. 이전 버전 사용자는 접합한 툴을 사용하세요!!)

BOM전개 쿼리문

SQL 2007/06/07 11:28 by 아쿠아바다
이러한 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
좀더 흥미로운 내용이 많이 있습니다.. HOME > SQL를 확인하세요
TAG ,   
0 Trackback, 0 Comment, :
1  ... 598 599 600 601 602 603 604 605 606  ... 769 
Statistics Graph
Total : 557,403 Today : 33