ORDER SIBLINGS BY 질문... 0 2 6,193

by 손님 ORDER SIBLINGS BY [2011.11.02 10:39:55]



이런 계층구조에서

grp    ||    id   ||   upcd   ||   seq   ||   nm
------------------------------------------------------------------
1     1    0 2     닭1
1 2    1  1     병아리1-1
1 3    1  0     병아리1-2
2     1    0  1     닭2
2 2    1  0     병아리2-1
2 3    1  1     병아리2-2



닭1
    병아리1-1
    병아리1-2
닭2
    병아리2-1
    병아리2-2

ORDER SIBLINGS BY seq 로 하게되면 .....
그룹화되있는 루트의 경우 ORDER SIBLINGS BY 가 안먹는것 같습니다. 두개의 부트리가 생기게되면
안되더라구요...ORA-30929: ORDER SIBLINGS BY clause not allowed here 이런에러가 나면서...

하나의 부모로 시작된 트리는 잘되는데... 왜 안되는지 모르겠습니다.
이럴경우 어떻게 하면 해결할수 있을까요?  해결방법을 아시는분은 예를좀 들어주셔요...
감사합니다
by 열심히 [2011.11.02 13:33:06]
이런 계층구조에서

grp || id || upcd || seq || nm
------------------------------------------------------------------
1 1 0 2 닭1
1 2 1 1 병아리1-1
1 3 1 0 병아리1-2
2 1 0 1 닭2
2 2 1 0 병아리2-1
2 3 1 1 병아리2-2



닭1
병아리1-1
병아리1-2
닭2
병아리2-1
병아리2-2


WITH TEST AS
(
SELECT 1 GRP, 1 ID1, 0 UPCD, 2 SEQ, '닭1' NM FROM DUAL UNION ALL
SELECT 1 GRP, 2 ID1, 1 UPCD, 1 SEQ, '병아리1-1' NM FROM DUAL UNION ALL
SELECT 1 GRP, 3 ID1, 1 UPCD, 0 SEQ, '병아리1-2' NM FROM DUAL UNION ALL
SELECT 2 GRP, 1 ID1, 0 UPCD, 1 SEQ, '닭2' NM FROM DUAL UNION ALL
SELECT 2 GRP, 2 ID1, 1 UPCD, 0 SEQ, '병아리2-1' NM FROM DUAL UNION ALL
SELECT 2 GRP, 3 ID1, 1 UPCD, 1 SEQ, '병아리2-2' NM FROM DUAL
)
SELECT A.GRP
,A.ID1
,A.UPCD
,A.SEQ
,A.NM
FROM TEST A
START WITH A.UPCD = 0
CONNECT BY PRIOR A.GRP = A.GRP
AND PRIOR A.ID1 = A.UPCD
ORDER SIBLINGS BY A.SEQ

ORDER SIBLINGS BY seq 로 하게되면 .....
그룹화되있는 루트의 경우 ORDER SIBLINGS BY 가 안먹는것 같습니다. 두개의 부트리가 생기게되면
안되더라구요... 닭2 인놈이 먼저 나와야 하는데...;;끄응

하나의 부모로 시작된 트리는 잘되는데... 왜 안되는지 모르겠습니다.
이럴경우 어떻게 하면 해결할수 있을까요? 해결방법을 아시는분은 예를좀 들어주셔요...

하나더...질문요.
ORA-30929: ORDER SIBLINGS BY clause not allowed here 이런에러가 나는건 왜 그런지 아시는분?.... 위에 쿼리에서 나는건 아님니다.

by 열심히 [2011.11.02 14:52:16]
한번더 감싸서 ORDER SIBLINGS BY 하니 잘되네요.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입