结果使用此tutorial创建我第一递归CTE只为你。
这里的诀窍是用空标记该行作为BigBoss
并将该值传递给递归部分。
最后where
有两个过滤器
PID IS NULL
展现父亲项。
OR NOT EXISTS
显示项目没有儿童
SQL Fiddle Demo
小提琴显示你的愿望输出,但如果你unncoment的代码,你可以看到完整的结果,以便更好地理解。
WITH DirectReports (PID, CId, Name, Level, BigBoss)
AS
(
-- Anchor member definition
SELECT e.PID, e.CId, e.Name, 0 AS Level, e.CId BigBoss
FROM dbo.Table1 AS e
WHERE e.PID IS NULL
UNION ALL
-- Recursive member definition
SELECT e.PID, e.CId, e.Name, Level + 1, d.BigBoss
FROM dbo.Table1 AS e
INNER JOIN DirectReports AS d
ON e.PID = d.CId
)
-- Statement that executes the CTE
-- SELECT d.PID, d.CId, d.Name, d.Level, d.BigBoss
-- FROM DirectReports d
SELECT CASE
WHEN PID IS NULL THEN NULL
ELSE BigBoss
END PID,
Cid, Name
FROM DirectReports
WHERE
PID IS NULL
OR NOT EXISTS (SELECT *
FROM Table1 t
WHERE d.CId = t.PID)
结果:
| PID | Cid | Name |
|--------|-----|-------------|
| (null) | 1 | Electronics |
| 1 | 5 | Samsung |
| 1 | 3 | Toshiba |
更新我的答案使用递归CTE。现在回到你想要的精确输出。 –