Я нашел это предложение WITH, которое я изменил для своих целей. Я не могу сказать, что я полностью понимаю, как это работает, когда я ссылаюсь на него внутри себя?
Как вы можете видеть на картинке, я получаю дубликаты в последних строках "4 gjutning" и "5 Målning".
Таким образом, в основном есть таблица соотношений для разных панелей, где вы сможете настроить рабочий процесс. Одна панель следует за другой, в этом случае у меня также есть параллельные панели. «3 Montering A» и «3 Montering B» представляют собой параллельные панели, которые можно увидеть из RunOrder, затем они объединяются в «4 Gjutning», за которым следует «5 Målning»
WITH PanelStructure as
(
Select p.factoryId, p.name Panel, p.HasScreen, ppr.ParentPanelId, ppr.PanelId, CAST(ppr.PanelId AS VarChar(Max)) as Level, CAST(1 AS int) RunOrder from PanelProductRelation ppr
inner JOIN Panel p on ppr.PanelId=p.id
where ppr.productid=1 and ParentPanelId=0 and p.CustomerId=7 --and p.HasScreen=1
UNION ALL
Select p2.factoryId, p2.name Panel,p2.HasScreen, ppr2.ParentPanelId, ppr2.PanelId,CAST(ppr2.PanelId AS VarChar(Max)) + ', ' + M.Level, CAST(1 AS int) + M.RunOrder
from PanelProductRelation ppr2
Inner JOIN Panel p2 on ppr2.PanelId=p2.id
INNER JOIN PanelStructure M ON m.PanelId = ppr2.ParentPanelId
where ppr2.productid=1 and p2.CustomerId=7 and p2.HasScreen=1
)
SELECT ps.* From PanelStructure ps
LEFT JOIN (Select ps2.ParentPanelId ParentPanelId ,count(ParentPanelId) ParentPanelIdCount from PanelStructure ps2 group by ps2.ParentPanelId ) dup ON dup.ParentPanelId=ps.ParentPanelId
;