1
有關將此平面數據排序爲低於順序的任何想法?平面數據分層順序
這個簡單的查詢工作不
select QuestionID , QuestionText , ReferenceID , ParentQuestionID from Question
where ReferenceID = 10208
order by ParentQuestionID,QuestionID
平面數據
這應該是爲了這樣的
有關將此平面數據排序爲低於順序的任何想法?平面數據分層順序
這個簡單的查詢工作不
select QuestionID , QuestionText , ReferenceID , ParentQuestionID from Question
where ReferenceID = 10208
order by ParentQuestionID,QuestionID
平面數據
這應該是爲了這樣的
你可以建立層次的字符串,然後把它分類。對於存儲您可以使用hierarchyid
WITH Question AS
(
SELECT * FROM (VALUES
(10208, -1),
(10209, 10208),
(10211, 10208),
(10214, 10208),
(10212, 10209),
(10213, 10209),
(10215, 10212)
) Question(QuestionID, ParentQuestionID)
), cte AS
(
-- Anchor
SELECT *, 0 AS Level, CAST('/' + CAST(QuestionID AS varchar) + '/' AS varchar(100)) AS Hierarchy
FROM Question WHERE ParentQuestionID = -1
UNION ALL
-- Recursive part
SELECT q.*, Level + 1, CAST(Hierarchy + CAST(q.QuestionID AS varchar) + '/' AS varchar(100))
FROM Question q INNER JOIN cte ON q.ParentQuestionID = cte.QuestionID
)
SELECT * FROM cte ORDER BY Hierarchy
編輯
要通過降
WITH Question AS
(
SELECT * FROM (VALUES
(10208, -1),
(10209, 10208),
(10211, 10208),
(10214, 10208),
(10212, 10209),
(10213, 10209),
(10215, 10212)
) Question(QuestionID, ParentQuestionID)
), cte AS
(
-- Anchor
SELECT *, 0 AS Level, CAST('/' + CAST(QuestionID AS varchar(max)) + '/' AS varchar(max)) AS Hierarchy
FROM Question WHERE ParentQuestionID = -1
UNION ALL
-- Recursive part
SELECT q.*, Level + 1, CAST(cte.Hierarchy + CAST(q.QuestionID AS varchar(max)) + '/' AS varchar(max))
FROM Question q INNER JOIN cte ON q.ParentQuestionID = cte.QuestionID
), rn AS
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY ParentQuestionID ORDER BY Hierarchy DESC) Seq FROM cte
)
SELECT * FROM rn ORDER BY ParentQuestionID, Seq
訂購如何訂購兒童問題作爲降序排列? – LittleDragon
@LittleDragon請參閱編輯 – Eric