안녕하세요, 조직도 쿼리를 뽑고 싶은데
부모코드나 노드를 가진 테이블이 따로 없어서 CTE재귀쿼리가 안되서 문의드립니다.
COM 테이블
com_cd com_nm
1 회사1
2 회사2
3 회사3
이렇게 회사 테이블이 있구요..
USER 테이블
COM_CD COM_NM DEPT_CD DEPT_NM USER_ID USER_NM
1 회사1 DEPT01 부서1 user1 사용자1
1 회사1 DEPT02 부서2 user2 사용자2
2 회사2 DEPT01 부서1 user3 사용자3
2 회사2 DEPT02 부서2 user4 사용자4
2 회사2 DEPT01 부서1 user5 사용자5
3 회사3 DEPT01 부서1 user6 사용자6
3 회사3 DEPT02 부서2 user7 사용자7
이렇게 회사 테이블과 유저테이블이 있습니다..
이 두개의 테이블을 조직도 형태로 뽑고 싶은데 CTE 재귀쿼리로 부모노드가 없어서 뽑히지가 않네요..
회사1
- 부서1
- 사용자1
- 부서2
- 사용자2
회사2
- 부서1
- 사용자3
- 사용자5
- 부서2
- 사용자4
회사3
- 부서1
- 사용자6
- 부서2
- 사용자7
이런형태로 쿼리를 뽑고 싶은데 가르침좀 주십시오..
감사합니다.
Comment 1
-
건우아빠
2016.09.06 11:38
손쉬운 방법 union all
with
#COM as
(
select 1 com_cd ,'회사1' com_nm union all
select 2 ,'회사2' com_nm union all
select 3 ,'회사3' com_nm ) ,
#USER as
(
select 1 com_cd ,'회사1' com_nm ,'DEPT01' dept_cd ,'부서1' dept_nm ,'user1' user_id ,'사용자1' user_nm union all
select 1 com_cd ,'회사1' com_nm ,'DEPT02' dept_cd ,'부서2' dept_nm ,'user2' user_id ,'사용자2' user_nm union all
select 2 com_cd ,'회사2' com_nm ,'DEPT01' dept_cd ,'부서1' dept_nm ,'user3' user_id ,'사용자3' user_nm union all
select 2 com_cd ,'회사2' com_nm ,'DEPT02' dept_cd ,'부서2' dept_nm ,'user4' user_id ,'사용자4' user_nm union all
select 2 com_cd ,'회사2' com_nm ,'DEPT01' dept_cd ,'부서1' dept_nm ,'user5' user_id ,'사용자5' user_nm union all
select 3 com_cd ,'회사3' com_nm ,'DEPT01' dept_cd ,'부서1' dept_nm ,'user6' user_id ,'사용자6' user_nm union all
select 3 com_cd ,'회사3' com_nm ,'DEPT02' dept_cd ,'부서2' dept_nm ,'user7' user_id ,'사용자7' user_nm
) ,
#DEPT as
(
select com_cd , com_nm, dept_cd , dept_nm
from #USER
group by com_cd , com_nm, dept_cd , dept_nm
) ,
#result as
(
select com_cd ,com_nm ,'' dept_cd ,'' dept_nm , '' user_id , '' user_nm , 0 sort
from #COM
union all
select com_cd ,com_nm , dept_cd , dept_nm , '' user_id , '' user_nm , 1 sort
from #DEPT
union all
select com_cd ,com_nm , dept_cd , dept_nm , user_id , user_nm , 2 sort
from #USER )
select case sort
when 0 then com_nm
else ''
end com_nm
, case sort
when 0 then ''
when 1 then '- '+ dept_nm
else ''
end dept_nm
, case sort
when 2 then '- ' + user_nm
else ''
end user_nm
from #result
order by com_cd , sort , user_id