안녕하세요.
CTE를 사용해서 계층형 쿼리를 만들고 있습니다.
계층형 쿼리에서 계층이 깨지지 않으면서 특정 값에 따라 정렬을 한 번 더해야하는 상황인데, 어떻게 해야될지 몰라서 질문드립니다.
특정 값에 따라 정렬을 할려고 하면 계층이 깨져서 문제입니다ㅠㅠ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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 값에 따라 재정렬하고 싶은데 어떻게 해야할까요?
귀한 시간 내주셔서 감사합니다ㅠㅠ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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 ; |