동적 HTML 테이블에서 셀 합치기(colspan / rowspan)를 구현할 때, 그룹 계층 구조 및 레벨별 데이터를 추출하기 위한 계층형 재귀 쿼리(WITH 절) 예시 소스입니다.
1. 그룹 계층 구조 조회 쿼리
특정 컴포넌트 번호들을 대상으로 그룹 레벨 및 순서를 재귀적으로 상위 추적하여 가져옵니다.
WITH cme(comp_no, comp_group_no, comp_group_name, comp_group_level_ref, level, display_order) AS (
SELECT cmp.ti_cathode_comp_no,
cmpg.ti_cathode_comp_group_no,
cmpg.ti_cathode_comp_group_name,
cmpg.ti_cathode_comp_group_level_ref,
1 AS level,
cmpg.display_order
FROM ti_cathode_comp cmp, ti_cathode_comp_group cmpg
WHERE cmp.ti_cathode_comp_no IN (
'34033000006', '34033000002', '34033000003', '34033000004',
'34033000005', '34033000001', '34033000007', '34033000008',
'34033000009', '34033000010', '34033000011', '34033000012',
'34033000013', '34033000014'
)
AND cmp.ti_cathode_comp_group_no = cmpg.ti_cathode_comp_group_no
UNION ALL
SELECT cme.comp_no,
cmpg.ti_cathode_comp_group_no,
cmpg.ti_cathode_comp_group_name,
cmpg.ti_cathode_comp_group_level_ref,
cme.level + 1,
cmpg.display_order
FROM cme, ti_cathode_comp_group cmpg
WHERE cmpg.ti_cathode_comp_group_no = cme.comp_group_level_ref
)
SELECT *
FROM cme
ORDER BY level DESC, comp_group_no ASC;
-- 그룹별/레벨별 카운트 조회 시
-- SELECT comp_group_name, level, COUNT(*)
-- FROM cme
-- GROUP BY comp_group_name, level;
2. 아이템 그룹 계층 조회 쿼리
아이템 목록의 그룹 레벨을 단계별로 확장하여 HTML 테이블 표출 시 병합 범위를 계산할 때 활용합니다.
WITH tle(lot_item_no, lot_item_group_no, lot_item_group_name, lot_item_group_level_ref, level, display_order) AS (
SELECT tl.lot_item_no,
tlg.lot_item_group_no,
tlg.lot_item_group_name,
tlg.lot_item_group_level_ref,
1 AS level,
tlg.display_order
FROM towpreg_lot_item tl, towpreg_lot_item_group tlg
WHERE tl.lot_item_no IN (SELECT lot_item_no FROM towpreg_lot_item)
AND tl.lot_item_group_no = tlg.lot_item_group_no
UNION ALL
SELECT tle.lot_item_no,
tlg.lot_item_group_no,
tlg.lot_item_group_name,
tlg.lot_item_group_level_ref,
tle.level + 1,
tlg.display_order
FROM tle, towpreg_lot_item_group tlg
WHERE tlg.lot_item_group_no = tle.lot_item_group_level_ref
)
SELECT *
FROM tle
ORDER BY level DESC, lot_item_group_no ASC;
-- 그룹별/레벨별 카운트 조회 시
-- SELECT lot_item_group_no, level, COUNT(*)
-- FROM tle
-- GROUP BY lot_item_group_no, level;
3. 핵심 정리
- WITH 절(CTE) 활용: 자기 자신을 참조하는 UNION ALL 구조를 사용하여 다단계 트리 구조 데이터의 깊이(level)를 계산합니다.
- HTML 병합 연동: 추출된 level 및 display_order 값을 기반으로 화면단에서 colspan 또는 rowspan 개수를 동적으로 렌더링할 때 유용합니다.