안녕하세요.
CTE를 사용해서 계층형 쿼리를 만들고 있습니다.
계층형 쿼리에서 계층이 깨지지 않으면서 특정 값에 따라 정렬을 한 번 더해야하는 상황인데, 어떻게 해야될지 몰라서 질문드립니다.
특정 값에 따라 정렬을 할려고 하면 계층이 깨져서 문제입니다ㅠㅠ
WITH RECURSIVE cte AS( SELECT 1 AS lv , empno , ename , job , mgr , rank , CAST(empno AS char(99)) x FROM emp WHERE job = 'PRESIDENT' UNION ALL SELECT b.lv + 1 AS lv , p.empno , p.ename , p.job , p.mgr , p.rank , CONCAT(b.x, '-', p.empno) x FROM emp p INNER JOIN cte b ON p.mgr = b.empno ) SELECT * FROM cte ORDER BY x;
위의 쿼리 결과로 아래와 같은 결과가 도출되는데, ename이 BLAKE 아래에 있는 SALESMAN의 정렬을 RANK 값에 따라 재정렬하고 싶은데 어떻게 해야할까요?
귀한 시간 내주셔서 감사합니다ㅠㅠ
WITH RECURSIVE cte AS ( SELECT 1 AS lv , empno , ename , job , mgr , rk , CAST(CONCAT(IFNULL(rk, 0), empno) AS CHAR(99)) x FROM emp WHERE job = 'PRESIDENT' UNION ALL SELECT b.lv + 1 AS lv , p.empno , p.ename , p.job , p.mgr , p.rk , CONCAT(b.x, '-', CONCAT(IFNULL(p.rk, 0), p.empno)) x FROM emp p INNER JOIN cte b ON p.mgr = b.empno ) SELECT * FROM cte ORDER BY x ;