Получить последний дочерний элемент из иерархии sql

У меня есть иерархия в моих таблицах, как это.

/1/ - This is Category 
/1/1/ - This is SubCategory
/1/1/1/ - This is Item
/1/1/2/ - Item
/1/1/3/ - Item
/1/2/ - SubCategory
/1/2/1/ - Item
/1/2/2/ - Item
/1/2/3 - Item

Я хочу получить последнего ребенка независимо от категории, подкатегории или элементов, используя SQL-запрос. Например. Если его категория, он вернет /1/ ; Если это подкатегория, она должна возвращать /1/ или /2/ (второй дочерний элемент/последний дочерний элемент); Если это Item, он должен вернуть 3-й ребенок/последний ребенок.

Я попробовал этот запрос. Но он возвращает мне только первую часть.

SELECT PricedItemHID.GetAncestor(PricedItemHID.GetLevel() -1) FROM ItemsList

person Yesudass Moses    schedule 21.06.2015    source источник
comment
Вы действительно храните данные, разделенные косой чертой, например «/1/1/»? (Или это отдельные столбцы?)   -  person jarlh    schedule 21.06.2015
comment
Его тип данных HierarchyID в SQL Server 2008; Он хранится вот так.   -  person Yesudass Moses    schedule 21.06.2015
comment
Понимаю. Спасибо за ответы! (Я не очень хорошо знаю SQL Server...)   -  person jarlh    schedule 21.06.2015
comment
Вам просто нужно /1/ (или /2/, или /3/)? По сути, последние три символа? Вам, вероятно, придется преобразовать в char, а затем выполнить поиск/подстроку. Не похоже, что есть что-то, что возвращает идентификатор уровня как таковой; в документации утверждается, что это всего лишь логическое представление, поэтому текущее значение может отличаться от того, что вы ожидаете.   -  person Clockwork-Muse    schedule 21.06.2015


Ответы (1)


Вы можете использовать что-то вроде этого:

Select @MaxChild = Max(OrgNode) from HumanResources.EmployeeDemo

эта ссылка может вам помочь [http://blogs.msdn.com/b/manisblog/archive/2007/08/28/sql-server-2008-hierarchyid-part-ii.aspx][1]

person Mostafa Marji    schedule 12.10.2015