데이터베이스

SQL CTE를 이용한 계층구조 출력하기

Jinwookoh 2014. 8. 18. 23:37

WITH CommentList (Sort1, Sort2, Level, ID, Parent, Name, Password, Homepage, SecretYN, Content, RegID, RegIP, RegDT)
AS
(
    SELECT 
    CAST(c.ID as varchar) as Sort1 ,
    CAST('' AS varchar) + CAST(0 AS varchar) as Sort2 ,
    0 AS Level, c.ID, c.Parent, c.Name, c.Password, c.Homepage, c.SecretYN, c.Content, c.RegID, c.RegIP, c.RegDT 
    FROM tbComments c
    LEFT OUTER JOIN tbCommentGroup cg on c.id = cg.CommentID
    Where cg.GroupID = 1 and c.Parent = 0

    UNION ALL 

    SELECT 
    cl.Sort1 ,
    CAST(cl.Sort2 AS varchar) + CAST(ROW_NUMBER() OVER(ORDER BY C.RegDT) AS varchar) AS Sort2,
    Level + 1 AS Level, c.ID, c.Parent, c.Name, c.Password, c.Homepage, c.SecretYN, c.Content, c.RegID, c.RegIP, c.RegDT 
    FROM tbComments as c
    INNER JOIN CommentList as cl
    ON c.Parent = cl.ID
)
SELECT C.*
FROM (
SELECT 
  ROW_NUMBER() OVER(ORDER BY Sort1 DESC, Sort2 ASC ) AS RowNo -- 로우넘버
, Sort1, Sort2, Level, ID, Parent, Name, Password, Homepage, SecretYN, Content, RegID, RegIP, RegDT FROM CommentList
) C
WHERE C.RowNo BETWEEN 1 AND 10 
Order by RowNo