将所有可能的父代合并到一个字段中
本章的最后一个任务是:从某个 ID 出发,找出所有可能的父代,并把各代中的 ID 合并到一个字段中。
为此,您将递归搜索所有可能的成员,并把这些信息追加到同一个字段中。您需要使用 CAST() 运算符把多个 ID 合并为字符串。
您将从 ID = 290 开始搜索所有家族成员。表 family 共包含 300 条记录。
本练习是课程的一部分
SQL Server 中的分层与递归查询
练习说明
- 将 290 的
ParentID设为起点。 - 在
CASE运算中,如果Parent.ID = '',则将Parent字段设为当前的ParentID。 - 在
CASE运算中,如果Parent.ID <> '',则在每次迭代中将当前的 Parent 追加上该 Parent ID。 - 从已定义的 CTE 中选择
Name和Parent。
交互式实操练习
通过完成这段示例代码来试试这个练习。
WITH tree AS (
SELECT
ID,
Name,
ParentID,
CAST('0' AS VARCHAR(MAX)) as Parent
FROM family
-- Initialize the ParentID to 290
WHERE ___ = ___
UNION ALL
SELECT
Next.ID,
Next.Name,
Parent.ID,
CAST(CASE WHEN Parent.ID = ''
-- Set the Parent field to the current ParentID
THEN(CAST(Next.___ AS VARCHAR(MAX)))
-- Add the ParentID to the current Parent in each iteration
ELSE(Parent.Parent + ' -> ' + CAST(Next.___ AS VARCHAR(MAX)))
END AS VARCHAR(MAX))
FROM family AS Next
INNER JOIN tree AS Parent
ON Next.ParentID = Parent.ID)
-- Select the Name, Parent from tree
SELECT ___, ___
FROM ___;