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 7134 게시물 읽기
No. 7134
쿼리문의
작성자
초보님
작성일
2018-08-16 16:33
조회수
2,089

 

 

데이터가 아래와 같이있습니다

prarent가 null인것은 부모데이터이구 데이터가있는것은 부모의ID를따라가는 자식데이터입니다

 

 

ID     / PARENT   /    second

1           null                     1        

2            1                       2          

3            1                       1

4           null                     2

5           null                     3

6            5                       1

7            5                       3

8            5                       2

9          null                      4

10          9                       1

 

 

 

아래와같이 select를 하고싶은데 쉽지가 않네요

 

도움을 부탁드립니다

 

 

 

ID     / PARENT   /    second

1           null                    1   

3            1                      1

2            1                      2  

4           null                    2

5           null                    3

6            5                      1

8            5                      2

7            5                      3

9           null                    4

 

이 글에 대한 댓글이 총 2건 있습니다.
MS-SQL은 connect by 쿼리가 없어서
아래와 같이 약간 복잡하게 
Sort 시킬 컬럼을 만들어 줘야 합니다.

with tree_table AS (
    select 1 ID, null PARENT, 1 second
    union all 
    select 2, 1, 2
    union all 
    select 3, 1, 1
    union all 
    select 4, null, 2
    union all 
    select 5, null, 3
    union all 
    select 6, 5, 1
    union all 
    select 7, 5, 3
    union all 
    select 8, 5, 2
    union all 
    select 9, null, 4
    union all 
    select 10, 9, 1
) 
select id, parent, second, sort
from (
	SELECT id, parent, second
		   , convert(varchar(255), second) sort 
	FROM tree_table
	WHERE parent is NULL
	UNION ALL
	SELECT B.id, B.parent, B.second
		   ,convert(varchar(255), convert(nvarchar,C.second) + ' > ' + convert(varchar(255), B.second)) sort
	FROM tree_table B, tree_table C
	WHERE B.parent = C.id
) t
order by sort
오라클이면 아래 같은 쿼리로 쉽게 처리가 가능합니다.
select *
from (
    select 1 ID, null PARENT, 1 second from dual
    union all 
    select 2, 1, 2 from dual
    union all 
    select 3, 1, 1 from dual
    union all 
    select 4, null, 2 from dual
    union all 
    select 5, null, 3 from dual
    union all 
    select 6, 5, 1 from dual
    union all 
    select 7, 5, 3 from dual
    union all 
    select 8, 5, 2 from dual
    union all 
    select 9, null, 4 from dual
    union all 
    select 10, 9, 1 from dual
) t
start with parent is null
connect by prior id=parent
order siblings by second    

 

박인호(paerae)님이 2018-08-17 10:13에 작성한 댓글입니다.
이 댓글은 2018-08-17 10:14에 마지막으로 수정되었습니다.

감사합니다~!

MSSQL로 구현한 코드는 CTE재귀처리인거죠??

초보님님이 2018-08-19 21:56에 작성한 댓글입니다.
이 댓글은 2018-08-19 21:59에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
7138반복적으로 사용되는 문장을 줄이고 싶어요...
Twins
2018-09-12
2083
7137동영상 db저장
eLEEL
2018-09-06
1964
7136쿼리 순서 정렬 2번재 질문 [1]
김지철
2018-08-30
2083
7134쿼리문의 [2]
초보님
2018-08-16
2089
7132비슷한 테이블 두개의 리스트 나열 가능여부 [2]
김지철
2018-08-13
2073
713130분 단위로 평균을 볼려고 합니다 [2]
정영배
2018-08-03
2258
7129mssql 로그인 실패 횟수에 따라 잠금 설정 방법 좀 알려주세요
최키럽
2018-07-05
2276
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.048초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다