Tree 구조를 게시판에 표시 해야 해서
WITH Tree_Query (a,b,c,Level) AS
(
SELECT
a
,b
,c
,1
FROM 테이블 AS [A]
WHERE 부모ID IS NULL--연결된 상위 데이터 ID
UNION ALL
SELECT
a
,b
,c
,C.Level + 1
FROM 테이블 AS [A]
INNER JOIN Tree_Query AS [C] ON A.부모ID = C.ID
)
코드를 짜두고는
부모데이터(Root Node)는 최신순으로,
하위데이터들은 최신순 반대로 Sorting해서 데이터를 표시하고 싶은데 방법이 없어서
ROW_NUMBER() OVER(ORDER BY) 처리로 Sorting할 기준 컬럼을 만들었다.
Partition개념을 추가해서 쓰는 쿼리가 많던대 이미 Union으로 하위 데이터들(Part)을 나누어 두었으므로 Parition까지는 필요 없다.
WITH Tree_Query (a,b,c,Level,Sort) AS
(
SELECT
a
,b
,c
,1
[Sort] = CONVERT(NVARCHAR(1000),ROW_NUMBER( ) OVER(ORDER BY [A].AID DESC) + 100000000 )
FROM 테이블 AS [A]
WHERE 부모ID IS NULL--연결된 상위 데이터 ID
UNION ALL
SELECT
a
,b
,c
,C.Level + 1
,[Sort] = CONVERT(NVARCHAR(1000), C.[Sort] + '.' + CONVERT(NVARCHAR(1000),ROW_NUMBER( ) OVER(ORDER BY [A].AID ASC)))
FROM 테이블 AS [A]
INNER JOIN Tree_Query AS [C] ON A.부모ID = C.ID
)
부모 데이터 Sort 컬럼에 + 100000000이 되어 있는 이유는
AID가 자동 증가 1,2,3,4 순인데
저렇게 Tree 하고 Select OrderBy 절에 Sort 컬럼을 ASC로 주면
1 다음에 2가 아니라 10, 11, 12 가 나온다.(문자열 비교라서..)
문자열로 최대 1000000000이상의 데이터는 없을거라 판단되어서 저렇게 처리.
'DB' 카테고리의 다른 글
[개념_퀴즈] 1-2 데이터 모델과 SQL (0) | 2021.03.08 |
---|---|
[개념_퀴즈] 1-1 데이터 모델링의 이해 (0) | 2021.03.03 |
[개념정리] NoSql vs Sql (0) | 2020.09.03 |
[코드처리] Update Table Row By Row (0) | 2020.02.06 |
[개념정리] ISNULL vs NULLIF (0) | 2020.02.06 |