WITH TREE_QUERY AS (
-- 앵커 멤버: 최상위 댓글 조회
SELECT
idx, parentIdx, content, regid, logintype, regdate, updateDate, filename, filesize, updateflag, emailflag, isOpBoard,
CONVERT(VARCHAR(255), idx) AS sort,
CONVERT(int, idx) AS FirstValue
FROM [treply]
WHERE (parentIdx IS NULL OR parentIdx = 0) AND boardidx = @boardidx
UNION ALL
-- 재귀 멤버: 대댓글 연결
SELECT
B.idx, B.parentIdx, B.content, B.regid, B.logintype, B.regdate, B.updateDate, B.filename, B.filesize, B.updateflag, B.emailflag, B.isOpBoard,
CONVERT(VARCHAR(255), C.sort + '-' + CONVERT(VARCHAR(255), B.idx)) AS sort,
CONVERT(int, CASE
WHEN CHARINDEX('-', C.sort) > 1 THEN LEFT(C.sort, CHARINDEX('-', C.sort) - 1)
ELSE C.sort
END) AS FirstValue
FROM [treply] B
INNER JOIN [TREE_QUERY] C ON C.idx = B.parentIdx
WHERE B.boardidx = @boardidx
)
-- 최종 출력
SELECT *
FROM TREE_QUERY
WHERE 1 = 1 {0}
ORDER BY FirstValue ASC, sort ASC;