Отображение данных в виде дерева семьи с условием, где
Я хочу, чтобы отобразить данные в генеалогическом древе. Я могу легко использовать следующий запрос. Я столкнулся с проблемой, когда состояние города. Если я ищу город paris, тогда он отобразит только те данные, которые относятся к paris, но я хочу отобразить те данные, которые имеют головку семьи, paris. (если глава семьи принадлежит paris, тогда отобразите всех детей головного дома. Не нужно, чтобы ребенок был из Парижа). -1 является корневым уровень головы
; WITH CTE
AS (
SELECT ROW_NUMBER() OVER (ORDER BY c.ContactId) as MCID , 1 as CID
,c.contactId
FROM ContactDetail c where c.FamilyHeadId = -1
UNION ALL
SELECT cte.MCID as MCID ,
CONVERT(INT,(
CONVERT(VARCHAR(10),CTE.CID) +
CONVERT(VARCHAR(10),ROW_NUMBER() OVER (ORDER BY p.ContactId))
)
) AS CID
,p.contactId
FROM ContactDetail p INNER JOIN cte ON p.FamilyHeadId = CTE.ContactId
)
select * from CTE
inner join ContactDetail b on cte.contactid = b.contactid
order by mcid,CID
У меня есть только один стол. пожалуйста, напишите ваш запрос в деталях. –
Я расширил полный запрос и добавил [SqlFiddle] (http://sqlfiddle.com/#!6/ce9d0/1). В конечном итоге у All ContactId есть FamilyHeadId 1 в качестве предка (который является единственным FamHead в Париже), за исключением 6,7 и 14. В стороне вы можете посмотреть [Иерархические данные] (https://msdn.microsoft. com/en-us/library/bb677173.aspx? f = 255 и MSPPError = -2147217396) в качестве альтернативного решения. – StuartLC
Thanx sir ваш запрос работает нормально, когда глава корневого уровня (-1) находится из paris. но как можно будет отображать, когда основная глава семьи не из Парижа, а подглавная - от paris, тогда она должна отображаться в данных от дочернего элемента до конца. –