我有一个表,其中包含主对象的一些子对象。任何子项都可以出现多次,并且有一个Occurences列包含该数字,因此表中的数据类似于:
ChildID | ParentID | Occurences
-------------------------------
1 | 1 | 2
2 | 1 | 2
3 | 2 | 1
4 | 2 | 3
我需要获取所有 child 的列表,每个 child 出现在结果中的次数是最核心的,例如
IDENT | ChildID | ParentID
--------------------------
1 | 1 | 1
2 | 1 | 1
3 | 2 | 1
4 | 2 | 1
5 | 3 | 2
6 | 4 | 2
7 | 4 | 2
8 | 4 | 2
我可以使用游标来执行此操作,该游标可以循环表并插入所需的任意多行,但是我认为这不是最好的解决方案。
谢谢您的帮助
创建脚本包括:
DECLARE @Children TABLE (ChildID int, ParentID int, Occurences int)
INSERT @Children
SELECT 1, 1, 2 UNION ALL
SELECT 2, 1, 2 UNION ALL
SELECT 3, 2, 1 UNION ALL
SELECT 4, 2, 3
最佳答案
;with C as
(
select ChildID,
ParentID,
Occurences - 1 as Occurences
from @Children
union all
select ChildID,
ParentID,
Occurences - 1 as Occurences
from C
where Occurences > 0
)
select row_number() over(order by ChildID) as IDENT,
ChildID,
ParentID
from C
order by IDENT
关于sql - 多次选择同一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6608055/