Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- WITH
- Tree(Id,Parent,Level) AS (
- SELECT
- Node_Id
- ,0
- ,0
- FROM CatalogOKPD WHERE Node_Parent_Id = 0
- UNION ALL
- SELECT
- okpd.Node_Id
- ,okpd.Node_Parent_Id
- ,t.Level+1
- FROM CatalogOKPD okpd
- JOIN Tree t ON t.Id = okpd.Node_Parent_Id)
- ,FullTree(Id,Child,Level,ChildLevel) AS (
- SELECT
- t1.Id
- ,t2.Id
- ,t1.Level
- ,t2.Level
- FROM Tree t1
- JOIN Tree t2 ON t1.Id=t2.Parent
- UNION ALL
- SELECT
- ft.Id
- ,t.Id
- ,ft.Level
- ,t.Level
- FROM Tree t
- JOIN FullTree ft ON t.Parent = ft.Child
- )
- SELECT * FROM FullTree
- WITH
- Nums(N) AS (select 0 union select 1),
- Tree(id,Child,Level,ChildLevel,old_n) AS (
- SELECT Node_Id, Node_Id, 0, 0, 1
- FROM CatalogOKPD WHERE Node_Parent_Id = 0
- UNION ALL
- SELECT case when N=0 then t.id else okpd.Node_Id end,
- okpd.Node_Id, t.Level+N,
- t.ChildLevel+1, N
- FROM Tree t, CatalogOKPD okpd, Nums N
- WHERE t.Child = okpd.Node_Parent_Id and (old_n=1 or N=0)
- )
- select id, Child, Level, ChildLevel
- from Tree
- where ChildLevel>0 and old_n=0
- order by Level, id, ChildLevel
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement