我有一个表有一个主对象的孩子.任何子项都可以出现多次,并且有一个包含该数字的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 举报,一经查实,本站将立刻删除。