사원코드로 최상위 부서까지 모든 상위 부서를 구해야 할 때 사용한다.
기본적인 하이라키 구조 예제는 많은데
역순 하이라키 구조 예제가 별로 없어서 기록을 남겨둠
SOME_TABLE 이라는 가상의 테이블을 대상으로 하였다.
주요 컬럼은 ID, P_ID, CODE 이며
ID, P_ID 는 부모/자식의 하이라키 구조 핵심
CODE 는 사원코드/부서코드 중 하나이다.
즉, SOME_TABLE은 부서와 사원 정보가 같이 들어 있는 테이블이다.
부서 코드만 있는 구조라면
WHERE CODE = @P_CODE 부분을 적절히 바꿔주면 되겠다.
IF OBJECT_ID('SP_PROC') IS NOT NULL
DROP PROC SP_PROC
GO
CREATE PROC SP_PROC
(
@P_CODE VARCHAR(32)
)
AS
BEGIN
SET NOCOUNT ON
;WITH CTE AS
(
SELECT
A.ID, A.P_ID, A.COL1, A.COL2, A.COL3, A.CODE
FROM SOME_TABLE A
WHERE CODE = @P_CODE
UNION ALL
SELECT
A.ID, A.P_ID, A.COL1, A.COL2, A.COL3, A.CODE
FROM SOME_TABLE A
INNER JOIN CTE B
ON A.ID = B.P_ID
AND A.ID <> ISNULL(A.P_ID, -99) -- 최상위 부서의 P_ID는 NULL임
)
SELECT
A.*,
B.TITLE
FROM CTE A
OPTION (MAXRECURSION 0) -- 하이라키 쿼리 시 100 넘는 에러 방지
END
GO
'프로그래밍 > DBMS' 카테고리의 다른 글
MYSQL 그룹별 RANK함수 구현하기 (0) | 2021.03.16 |
---|---|
Mysql 칼렌더 덤프 데이터 만들기 (0) | 2021.02.17 |
mssql log 파일 축소 (0) | 2018.03.27 |
MSSQL 클러스터드 인덱스 생성 스크립트 (0) | 2018.02.02 |
[MSSQL] Create Table (0) | 2017.10.31 |
[MSSQL] 컬럼 추가 템플릿, Add Column (0) | 2017.10.19 |
MSSQL 테이블 사용하는 프로시저 찾기 (0) | 2017.09.21 |
Oracle 연결시에 BadImageFormatException 32비트 문제 발생 시 (2) | 2016.11.22 |