У меня есть таблица спецификаций с:
ParentProdID, Qty, ComponentProdID
и два других, которые необходимо присоединить к таблице спецификации для условий, например:
ParentProdID = ProdTable.ProdID
ProdTable.TraitCode = SuppTable.TraitDesc
Я бы хотел иметь конечный стол с:
Parent code | Last component
где родительский код заполняет черты ProdID.A и Trait.B или Trait.C
Последний компонент в дереве, который заполняет Trait.B (последний компонент может быть родительским, у которого есть дочерние элементы, но если ни один из дочерних элементов не имеет черты B, я хочу рассматривать их как листья)
Насколько я могу судить, SQL Server должен быть в состоянии сделать это или что-то подобное, но я довольно новичок в рекурсии с SQL. Большинство решений, которые я видел, используют рекурсивные CTE для иерархической печати всей спецификации в двух столбцах, что близко, но не так чисто, как хотелось бы.
Можно ли сделать признак материалом CTE и сослаться на него в (предположительно, CTE), который находит листья для родительского продукта?
Родители не должны быть настоящими корневыми узлами и могут быть чем угодно.
например. для спецификации:
Guitar(Wood, EndProduct)
-Neck(Wood, Neck)
--Strings(Metal, Neck)
--Hardware(Metal, Neck)
--NeckPiece(Wood, Neck)
-Body(Wood, Body)
--Bottom(Wood, Body)
--Top(Wood, Body)
будет напечатано:
Parent|Leaf
Guitar|NeckPiece
Neck|NeckPiece
Если такого рода вещи на SQL-сервере невозможны, распечатка списка всех дочерних элементов родителя вместе со счетчиком глубины, а затем упорядочение результирующего набора так, чтобы наивысшие оценки глубины находились наверху, получили бы функционально идентичную результат для функции поиска сверху вниз, такой как MATCH или VLOOKUP в Excel?