我有一个表,其中包含主对象的一些子对象。任何子项都可以出现多次,并且有一个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/

10-14 04:17