테이블 A
CODE CODE 1 DVS
---------- ------------ -------
ACODE ACODE-1 P
ACODE ACODE-2 A
ACODE ACODE-3 A
.
.
.
ACODE-1 ACODE-1-1 A
ACODE-1 ACODE-1-2 A
ACODE-1-1 ACODE-1-1-1 A
ACODE-1-1 ACODE-1-1-2 P
ACODE-1-1 ACODE-1-1-3 A
. . .
CODE CODE 1
---------- ------------
ACODE ACODE-1
ACODE-1 ACODE-1-3
ACODE-1-1 ACODE-1-1-2
Comment 3
-
Terry
2015.12.03 10:47
-
Terry
2015.12.03 10:59
글을 천천히 보다보니 궁금한점이 하나 있네요..
BOM Tree 구조 테이블이 맞다고 가정하면
같은 Level 에 대해서 순번 기준이 있어야 하고
보통 테이블내에서 컬럼값으로 그 기준을 정하고 가는데
(Level 이야 CTE 나 Cursor 로 처리한다고 해도..)
샘플로 주신 데이터를 보니 순번 컬럼이 없는걸 보니
BOM 이 아닌건가 싶기도 하고 아리송하네요..^^;
예를 들어 제가 덧글단 with 구문의 bom
을 토대로, DVS 의 값이 전체가 다 'P' 인 경우..
Sorting 에 문제가 될 소지가 다분한데..
그 기준값이 없으니..
궁금하네요~~
-
백마탄나
2015.12.03 12:17
답변 감사드립니다
다시 수정해서 올렸습니다. 트리 구조(Bom) 맞습니다.
BOM Tree 구조인듯한데..
샘플로 주신 데이터가 좀 맞지 않는듯하네요..^^;;
샘플데이터 수정해서 처리해봤습니다.
참고만 하세요...
---쿼리시작---
with bom(CODE,CODE1,DVS) As
(
Select 'ACODE' ,'ACODE-1' ,'P' Union All
Select 'ACODE' ,'ACODE-2' ,'A' Union All
Select 'ACODE' ,'ACODE-3' ,'A' Union All
Select 'ACODE-1' ,'ACODE-1-1' ,'A' Union All
Select 'ACODE-1' ,'ACODE-1-2' ,'A' Union All
Select 'ACODE-1' ,'ACODE-1-3' ,'P' Union All
Select 'ACODE-1-1' ,'ACODE-1-1-1' ,'A' Union All
Select 'ACODE-1-1' ,'ACODE-1-1-2' ,'P' Union All
Select 'ACODE-1-1' ,'ACODE-1-1-3' ,'A' Union All
Select 'ACODE-1-3' ,'ACODE-1-1-3' ,'P'
)
,bom_ex(CODE,CODE1,DVS,SEQ) As
(
Select a.*
,1
From bom a
Where Not Exists ( Select 'x' From bom b Where a.CODE = b.CODE1 )
And a.DVS = 'P'
Union All
Select b.CODE
,b.CODE1
,b.DVS
,a.SEQ + 1
From bom_ex a Inner Join bom b On a.CODE1 = b.CODE
Where b.DVS = 'P'
)
Select *
From bom_ex