database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 3966 게시물 읽기
No. 3966
트리에 관한 질문
작성자
김현호(kerberos1004)
작성일
2008-01-10 14:11ⓒ
2008-01-10 16:20ⓜ
조회수
3,277

OS : MS server 2000
DB : MS sql 2005

+ 생물
       + 동물
               + 육식동물
                      + 호랑이
                      + 사자
               + 초식동물
                      + 사슴
                      + 토끼
       + 식물
              + 수중식물
                      + 미역
                      + 파래
              + 육상식물
                      + 소나무
                      + 참나무

위의 트리와 같이 구성하기위하여
menu_no | p_menu_no | menu_name
1               0                  생물
2               1                  동물
3               1                  식물
4               2                  육식동물
5               2                  초식동물
6               3                  수중식물
7               3                  육상식물
8               4                  호랑이
9               4                  사자
10             5                   사슴
11             5                   토끼
12             6                   미역
13             6                   파래
14             7                   소나무
15             7                   참나무


테이블에 데이터를 넣었습니다.

여기서 저가 원하는 것은
참나무와 사자를 검색했을때 나오는 트리모양이 아래와 같았으면 합니다.
+ 생물
       + 동물
               + 육식동물
                      + 사자
       + 식물
              + 육상식물
                      + 참나무

데이터 정렬로는 
menu_no | p_menu_no | menu_name
1               0                  생물
2               1                  동물
4               2                  육식동물
9               4                  사자
3               1                  식물
7               3                  육상식물
15             7                   참나무

위와 같이 데이터를 정렬 하고 싶습니다.

이러한 경우에는 어떻게 하면 좋을까요?
어떠한 방식으로 스키마를 바꿔야 하는지 또는 추가되어야 하는지,
쿼리는 무엇인지...

with 를 사용해서 쿼리를 만들어 봤는데 저가 원하는 정렬이 안되더군요
위의 테이블명이 TEST로 봤을때

WITH DirectReports (p_menu_no, menu_no, menu_name)
AS
(
        SELECT p_menu_no, menu_no, menu_name
        From TEST
        WHERE menu_no = 9 or menu_no = 15
        UNION ALL
        SELECT p.p_menu_no, p.menu_no, p.menu_name
        From TEST AS p
        INNER JOIN DirectReports AS d
                ON p.menu_no = d.p_menu_no
)
Select p_menu_no, menu_no, menu_name
from DirectReports
group by p_menu_no, menu_no, menu_name 

이렇게 쿼리를 만들어 봤는데... 정렬이 OTL 입니다..

우찌 좋은 방법이 없을까요?

------------ sql -------------------

CREATE TABLE TEST (

 menu_no int

 , p_menu_no int

 , menu_name NVARCHAR(10)
)

INSERT INTO TEST

 SELECT '1', '0', '생물' UNION ALL
 SELECT '2', '1', '동물' UNION ALL
 SELECT '3', '1', '식물' UNION ALL
 SELECT '4', '2', '육식동물' UNION ALL
 SELECT '5', '2', '초식동물' UNION ALL
 SELECT '6', '3', '수중식물' UNION ALL 
 SELECT '7', '3', '육상식물' UNION ALL
 SELECT '8', '4', '호랑이' UNION ALL
 SELECT '9', '4', '사자' UNION ALL
 SELECT '10', '5', '사슴' UNION ALL
 SELECT '11', '5', '토끼' UNION ALL
 SELECT '12', '6', '미역' UNION ALL
 SELECT '13', '6', '파래' UNION ALL
 SELECT '14', '7', '소나무' UNION ALL
 SELECT '15', '7', '참나무'

WITH DirectReports (p_menu_no, menu_no, menu_name)
AS
(
        SELECT p_menu_no, menu_no, menu_name
        From TEST
        WHERE menu_no = 9 or menu_no = 15
        UNION ALL
        SELECT p.p_menu_no, p.menu_no, p.menu_name
        From TEST AS p
        INNER JOIN DirectReports AS d
                ON p.menu_no = d.p_menu_no
)
Select p_menu_no, menu_no, menu_name 
from DirectReports
group by p_menu_no, menu_no, menu_name 

이 글에 대한 댓글이 총 2건 있습니다.

cross apply 쓰시면서 함수 쓰시면 쉽게 나오던데요 딱 예제로 나와 있습니다. 

bol 참조 하세요

석이님이 2008-01-10 16:32에 작성한 댓글입니다. Edit

bol 참조가 설명서 참조란 말인가요?

어디에서 무엇을 찾아야 할지...

조금만더 상세히 알려 주세요 ;;

답변 감사 합니다.

김현호(kerberos1004)님이 2008-01-10 17:07에 작성한 댓글입니다.
이 댓글은 2008-01-10 17:24에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
3969[급] 분산트랜잭션관련 문의 (메시지 7391)
reo007
2008-01-11
4517
3968pivot 사용에서 질문....
이경훈
2008-01-11
3353
3967쿼리 질문 하나 드립니다. 가능한경우인지 봐주세요 [3]
김민
2008-01-11
3327
3966트리에 관한 질문 [2]
김현호
2008-01-10
3277
3965제 생각이 맞는건지 판단좀 부탁드립니다,,, [3]
박희철
2008-01-10
3189
3964MS sql 2005설치시 "서비스 계정" 부분
arami
2008-01-10
3715
3963Linked_Server 이용시 SQL_Server 내부에선? [1]
정대웅
2008-01-09
3097
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.022초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다