如何使用T-SQL将分组聚合后的记录拆分为对应数量的重复单行记录
方案1:SQL Server 2022及以上版本(推荐,语法简洁)
使用GENERATE_SERIES函数配合CROSS APPLY实现,代码如下:
-- 请将aggregated_table替换为你实际的表名 SELECT t.name FROM aggregated_table t CROSS APPLY GENERATE_SERIES(1, t.count)
逻辑说明:GENERATE_SERIES(1, t.count)会为每一行生成从1到对应count值的连续整数序列,CROSS APPLY关联后原行就会被复制为count行,正好满足拆分组的需求。
方案2:兼容所有SQL Server版本(递归CTE实现)
如果你的数据库版本低于2022,可以用递归公共表表达式实现:
-- 请将aggregated_table替换为你实际的表名 WITH RecursiveCTE AS ( -- 锚点:初始化每个姓名的第一条记录 SELECT name, count, 1 AS row_num FROM aggregated_table UNION ALL -- 递归:循环生成剩余行,直到行数达到count值 SELECT name, count, row_num + 1 FROM RecursiveCTE WHERE row_num < count ) SELECT name FROM RecursiveCTE -- ORDER BY name 可选,需要按姓名排序时打开 OPTION (MAXRECURSION 0); -- 取消默认100层的递归限制,适配count值大于100的场景
两种方案执行后都可以得到你要求的输出结果,测试数据验证完全匹配预期。
内容的提问来源于stack exchange,提问作者chinanu
相关产品推荐
相关产品推荐

