[SQL] 나무 테이블에 대한 SQL 쿼리
SQL나무 테이블에 대한 SQL 쿼리
나는 트리 구조의 테이블이 있습니다 :
id parentId name
----------------
1 0 Category1
2 0 Category2
3 1 Category3
4 2 Category4
5 1 Category5
6 2 Category6
7 3 Category7
SQL 쿼리 결과에서 나는 테이블 등이 필요합니다 :
id parentId level name
----------------------
1 0 0 Category1
3 1 1 Category3
7 3 2 Category7
5 1 1 Category5
2 0 0 Category2
4 2 1 Category4
6 2 1 Category6
누가 쓰기 MS-SQL 쿼리에 나를 도울 수 있습니까? 감사!
해결법
-
==============================
1.a_horse_with_no_name의 대답에 확장, ROW_NUMBER와 함께 재귀 CTE의 SQL 서버의 구현을 (재귀 단일 레코드 크로스 적용)를 사용하는 방법이 쇼 ()는 문제의 정확한 출력을 생성합니다.
a_horse_with_no_name의 대답에 확장, ROW_NUMBER와 함께 재귀 CTE의 SQL 서버의 구현을 (재귀 단일 레코드 크로스 적용)를 사용하는 방법이 쇼 ()는 문제의 정확한 출력을 생성합니다.
declare @t table(id int,parentId int,name varchar(20)) insert @t select 1, 0 ,'Category1' insert @t select 2, 0, 'Category2' insert @t select 3, 1, 'Category3' insert @t select 4 , 2, 'Category4' insert @t select 5 , 1, 'Category5' insert @t select 6 , 2, 'Category6' insert @t select 7 , 3, 'Category7' ; WITH tree (id, parentid, level, name, rn) as ( SELECT id, parentid, 0 as level, name, convert(varchar(max),right(row_number() over (order by id),10)) rn FROM @t WHERE parentid = 0 UNION ALL SELECT c2.id, c2.parentid, tree.level + 1, c2.name, rn + '/' + convert(varchar(max),right(row_number() over (order by tree.id),10)) FROM @t c2 INNER JOIN tree ON tree.id = c2.parentid ) SELECT * FROM tree order by RN
우리는 id로 직접 주문하고 있기 때문에 트리 "경로"를 생산하기 위해 ID를 자신을 사용하여, 솔직히 말해서, 작동합니다,하지만 난이 ROW_NUMBER () 함수에서 빠져 줄 알았는데.
-
==============================
2.
WITH tree (id, parentid, level, name) as ( SELECT id, parentid, 0 as level, name FROM your_table WHERE parentid = 0 UNION ALL SELECT c2.id, c2.parentid, tree.level + 1, c2.name FROM your_table c2 INNER JOIN tree ON tree.id = c2.parentid ) SELECT * FROM tree;
그래서 오타 (구문 오류)에있을 수 있습니다, 그것을 테스트하기 위해 손에 현재없는 SQL 서버가있다
from https://stackoverflow.com/questions/5522478/sql-query-for-tree-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] (SQL의 28 개 라인을 작성하지 않고도) 28 일 슬라이딩 윈도우 집계에 대한 BigQuery의 SQL (0) | 2020.05.21 |
---|---|
[SQL] LINQ 쿼리의 SQL 사용자 정의 함수를 호출 (0) | 2020.05.21 |
[SQL] 어떻게 열 값을 기준으로 연속 행을 찾는 방법은? (0) | 2020.05.21 |
[SQL] SQL Server의 7 일 롤링 평균에 대한 SQL 쿼리 (0) | 2020.05.21 |
[SQL] SQL 서버에 데이터를 삽입하는 방법 (0) | 2020.05.21 |