微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql – 多次选择同一行

我有一个表有一个主对象的孩子.任何子项都可以出现多次,并且有一个包含该数字的Occurences列,因此表中的数据类似于:
ChildID | ParentID | Occurences
-------------------------------
      1 |        1 |        2
      2 |        1 |        2
      3 |        2 |        1
      4 |        2 |        3

我需要得到所有孩子的清单,每个孩子在结果中出现核心次数,例如

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,2 UNION ALL
SELECT  3,2,1 UNION ALL
SELECT  4,3

解决方法

;with C as
(
  select ChildID,ParentID,Occurences - 1 as Occurences
  from @Children
  union all
  select ChildID,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

原文地址:https://www.jb51.cc/mssql/84065.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐