조직도와 비슷한 재귀적 쿼리(Query) 예문.
DB&XML 2009. 5. 25. 06:58 |위쪽의 쿼리 결과 리스트에서 보면 uid, puid, grade 등의 조직도를 구성할 수 있는 정보가 존재 할때
아래와 같은 결과를 만들어 낼 수 있다.
[쿼리예]
with empCTE(empUid, mgrName, dept, level)
as
(
-- 보스
select uid, puid, grade, 0
from userList
where puid is null and grade = '0'
union all
-- 나머지 grade를 포함한 내용
select aa.uid, aa.puid, aa.grade, bb.level+1
from userList as aa inner join empCTE as bb
on aa.puid = bb.empUid
where bb.level < 3 -- 이 코드가 없어지면 모든 grade에 대해서 출력이 된다. 즉, grade를 제한할때 사용
)
select replicate('ㄴ', level) + empUid as uid, dept from empCTE order by empUid, level
as
(
-- 보스
select uid, puid, grade, 0
from userList
where puid is null and grade = '0'
union all
-- 나머지 grade를 포함한 내용
select aa.uid, aa.puid, aa.grade, bb.level+1
from userList as aa inner join empCTE as bb
on aa.puid = bb.empUid
where bb.level < 3 -- 이 코드가 없어지면 모든 grade에 대해서 출력이 된다. 즉, grade를 제한할때 사용
)
select replicate('ㄴ', level) + empUid as uid, dept from empCTE order by empUid, level