mssql 트리구조 쿼리 질문 드립니다. 0 1 5,777

by 누구얌 [SQLServer] mssql 트리구조 [2014.02.08 11:02:07]



안녕하세요 mssql 로 트리구조 쿼리를 짜려고 하는데 정렬 순서 때문에 문제가 있네요;;

어떻게 짜야 할지 모르겠어요

sqlserver 2005 사용중입니다.

질문 드립니다.
제가 메뉴를 한번에 출력하는 쿼리를 짜려고 하는데요


테이블 구조는 메뉴 코드 /  상위 메뉴 코드 / 메뉴 명 / 정렬순서(1,2,3,4 이렇게들어감)


문제는 메뉴 1 dept 마다 순서를 정렬 할수 있습니다.
예로

1dept 에 메뉴 1 , 메뉴 2 ,메뉴 3 이 있으면 여기 정렬을  메뉴 1이 3번째 이고 메뉴 3이 2번째 메뉴 2가 3번째로 이렇게 dept 마다 순서가 따로 1 부터 해서 지정을 할수 있거든요

어떻게 한방 쿼리를 만들지 못할까요??


mssql 로 짜야 하는데 답이 안나오네요;; 어떻게 한번에 다 나오게 할수 없을까요??


이런식 입니다.


-메뉴3

  -명1

  -명3

  -명2

-메뉴2

  -명명1

  -명명5
    -명명오3
    -명명오1
    -명명오2

  -명명2

  -명명3

  -명명4

-메뉴1

 -뉴뉴2

  -뉴뉴1

by 마농 [2014.02.11 13:57:32]
WITH t1 AS
(-- 원본 테이블 --
SELECT '메뉴3' cd, Null pcd, 1 seq
UNION ALL SELECT '명1'  , '메뉴3', 1
UNION ALL SELECT '명3'  , '메뉴3', 2
UNION ALL SELECT '명2'  , '메뉴3', 3
UNION ALL SELECT '메뉴2' , Null  , 2
UNION ALL SELECT '명명1' , '메뉴2', 1
UNION ALL SELECT '명명5' , '메뉴2', 2
UNION ALL SELECT '명명오3', '명명5', 1
UNION ALL SELECT '명명오1', '명명5', 2
UNION ALL SELECT '명명오2', '명명5', 3
UNION ALL SELECT '명명2' , '메뉴2', 3
UNION ALL SELECT '명명3' , '메뉴2', 4
UNION ALL SELECT '명명4' , '메뉴2', 5
UNION ALL SELECT '메뉴1' , Null  , 3
UNION ALL SELECT '뉴뉴2' , '메뉴1', 1
UNION ALL SELECT '뉴뉴1' , '메뉴1', 2
)
, t2 AS
(-- With 구문에서의 Recursive SQL --
SELECT cd, pcd, seq
     , 1 lv
     , seq * POWER(10, 6) ord
  FROM t1
 WHERE pcd IS NULL OR pcd = ''
 UNION ALL
SELECT c.cd, c.pcd, c.seq
     , p.lv + 1 lv
     , p.ord + c.seq * POWER(10, 6 - p.lv) ord
  FROM t1 c
 INNER JOIN t2 p
    ON p.cd = c.pcd
)
SELECT *
  FROM t2
 ORDER BY ord
;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입