team_table
aaa varchar(5), -- 팀코드
bbb varchar(10), -- 부서코드
ccc varchar(10) -- 최상위 마스터 코드
위와 같은 테이블 구조가 있습니다.
aaa bbb ccc
no1 n111 n123
no2 n112 n123
no2 n113 n123
no2 n114 n123
s10 s111 s123
s11 s121 s123
s11 s122 s123
s12 s131 s123
s13 s141 s123
s14 s151 s123
s14 s152 s123
s14 s153 s123
s15 s161 s123
w21 w111 w123
w21 w112 w123
w22 w121 w123
w24 w141 w123
w27 w161 w123
w27 w162 w123
위와 같이 데이터가 존재 할경
where ccc = 's123' 으로 조회를 할경우
s10 -- 팀코드
s111 -- 팀코드 하위 부서정보
s11 -- 팀코드
s121 -- 팀코드 하위 부서정보
s122 -- 팀코드 하위 부서정보
s12 -- 팀코드
s131 -- 팀코드 하위 부서정보
s13 -- 팀코드
s141 -- 팀코드 하위 부서정보
s14 -- 팀코드
s151 -- 팀코드 하위 부서정보
s152 -- 팀코드 하위 부서정보
s153 -- 팀코드 하위 부서정보
s15 -- 팀코드
s161 -- 팀코드 하위 부서정보
하나의 셀에 위와 같이 데이터를 추출하고자 합니다.
어떻게 해야 할지 감이 잡히질 않아서요..
어떻게 쿼리를 짜야 할지.. 조언 부탁드리겠습니다.
감사합니다.
Comment 6
-
항해자™
2016.04.20 09:35
쿼리 희망 결과 이해가 안되네요;; -
호짱
2016.04.20 09:53
ccc컬럼의 값을로 's123' 을 조회 하면
s10 s111 s123
s11 s121 s123
s11 s122 s123
s12 s131 s123
.
.
.
이렇게 데이터가 조회 됩니다.
이렇게 조회된 데이터를 저는 하나의 컬럼으로
aaa 컬럼의 팀 정보 하위 부서 정보로 나타나게 할려고 합니다.
s10 의 팀 코드에 포함된 부서코드는 s111
s11 의 팀 코드에 포함된 부서코드는 s121, s122
s12 의 팀 코드에 포함된 부서코드는 s131...
하나의 컬럼에
s10 팀코드가 이 먼저 나온 후
s111 s10팀코드에 해당하는 부서코드(s10에 하위 부서코드가 없으니 다음 팀코드)
s11 팀코드...
s121 s11에 해당하는 부서정보
s122 s11에 해당하는 부서정보...
이렇게 하나의 컬럼에
팀정보가 나타나고
해당 팀정보에 부서 정보가 나타나게 하고자 합니다.
쿼리가 한번에 안된다면.
가상테이블을 사용하여
팀정보 를 넣어주고,
커서를 이용하여 팀정보에 해당하는 부서를
가상테이블에 넣어 줄까도 생각중입니다.
-
ilovejsp
2016.04.21 09:25
SELECT [bbb]
FROM ( SELECT [aaa] ,
[aaa] AS [bbb] ,
0 step
FROM [team_table]
WHERE [ccc] = 's123'
GROUP BY [aaa]
UNION ALL
SELECT [aaa] ,
[bbb] ,
ROW_NUMBER() OVER ( PARTITION BY [aaa] ORDER BY [bbb] )
FROM [team_table]
WHERE [ccc] = 's123'
) RESULT
ORDER BY aaa + CONVERT(VARCHAR(20), step);
-
호짱
2016.04.28 10:32
답변 감사 드립니다.
query문 이 상당히 간결하네요..
-
Terry
2016.04.21 10:15
CTE (재귀쿼리) 로 보여지는군요..
bom 트리구조와 같은 ^^;
ilovejsp 님과는 다른 형태로 풀어봤습니다.
하기쿼리 참고하세요..
---쿼리시작---
Declare @top_id char(5)
Set @top_id = 's123'
;With team_table(aaa,bbb,ccc) As
(
Select 'no1','n111','n123' Union All
Select 'no2','n112','n123' Union All
Select 'no2','n113','n123' Union All
Select 'no2','n114','n123' Union All
Select 's10','s111','s123' Union All
Select 's10','s112','s123' Union All
Select 's11','s121','s123' Union All
Select 's11','s122','s123' Union All
Select 's12','s131','s123' Union All
Select 's13','s141','s123' Union All
Select 's14','s151','s123' Union All
Select 's14','s152','s123' Union All
Select 's14','s153','s123' Union All
Select 's15','s161','s123' Union All
Select 'w21','w111','w123' Union All
Select 'w21','w112','w123' Union All
Select 'w22','w121','w123' Union All
Select 'w24','w141','w123' Union All
Select 'w27','w161','w123' Union All
Select 'w27','w162','w123'
)
,tblB(aaa,bbb,ccc,seq,seqx,item) As
(
Select a.*
,ROW_NUMBER() over (PARTITION by a.aaa Order By a.aaa Asc) As seq
,ROW_NUMBER() Over (order by a.aaa,a.bbb)
,a.ccc
From team_table a
Where a.ccc = @top_id
)
,tblC(child,parent,seq,seqx,serial,item) As
(
Select a.aaa
,MAX(a.ccc)
,ROW_NUMBER() Over (Order By a.aaa Asc)
,1
,1
,Max(a.item)
From tblB a
Group By a.aaaUnion All
Select a.bbb
,a.aaa
,Row_Number() Over (Partition By a.aaa Order By a.bbb Asc)--seq
,1
,2
,Max(a.item)
From tblB a
Group By a.bbb
,a.aaa
)
,cteBOM(item,child,parent,levl,seq,serial) As
(
Select a.item
,a.child
,a.parent
,a.serial
,a.seq
,Replace(Convert(varchar(max),Convert(char(2),IsNull(b.seq,'')) + CONVERT(char(2),a.seq)),'0 ','')
From tblC a
Left Outer Join
tblC b
On a.parent = b.child
)
Select a.item
,a.child
,a.parent
,a.levl
,a.seq
,a.serial
From cteBOM a
Order By a.serial Asc
---쿼리끝--- -
호짱
2016.04.28 10:33
답변 감사 드립니다.
query 분석을 해 봐야 겠습니다.
query 스킬이 놀랍네요...