Попробуйте следующее:
;WITH FamilyCTE
AS
(
SELECT
*,
CAST(NULL AS VARCHAR(50)) AS FatherName,
CAST(NULL AS VARCHAR(50)) AS MotherName, 0 AS Level
FROM @FamilyTree
WHERE FatherID IS NULL
AND MotherID IS NULL
UNION ALL
SELECT
f.ID,
f.Name AS ParentName,
f.MotherID,
f.FatherID,
c.Name AS FatherName,
c2.Name AS MotherName,
Level + 1
FROM @FamilyTree AS F
INNER JOIN FamilyCTE c ON F.FatherID = c.ID
INNER JOIN @FamilyTree c2 ON f.MotherID = c2.ID
)
SELECT * FROM FamilyCTE
Если вы хотите получить точный результат, как то, что вы разместили в своем вопросе, просто игнорируете FatherName
и MotherName
и ограничить выделение в SELECT * FROM FamilyCTE
столбцами, которые вы хотите выбрать, с стартовым отцом в анкерном запросе, например, с помощью WHERE ID = 1
. Как в следующем демо:
Вот как это можно легко исправить с раскадровки:
Вид таблицы> Инспектор размеров> Вставки содержимого: Никогда
Вы можете прокручивать программно при загрузке вида.
tableView.setContentOffset(CGPoint(x: 0, y: -70), animated: false)
Не уверен, что это лучший способ, но я исправил это, добавив:
tableView.contentOffset.y = -70
после строки:
tableView.contentInset = UIEdgeInsets(top: 70, left: 0, bottom: 50, right: 0)
Вы предоставляете объект UIEdgeInset,
UIEdgeInsets(top: 50, left: 0, bottom: 0, right: 0)
Свойство top показывает расстояние от верхней части содержимого до верхней границы области.