我有一个表,我试图根据第二列的值将每一行分成一个或多个行。像这样:
table (id, pcs): ABC 3 DEF 1 GHJ 4 query result (id, pcs_num): ABC 1 ABC 2 ABC 3 DEF 1 GHJ 1 GHJ 2 GHJ 3 GHJ 4
我将其编写为SQL Server 2008中的sproc。我最好的解决方案是使用游标并向临时表中为表中的每一行添加[pcs]行数。似乎必须有一个比我所缺少的解决方案更简单的解决方案。谢谢。
您可以使用递归CTE:
;WITH CTE AS ( SELECT * FROM YourTable UNION ALL SELECT id, pcs-1 FROM CTE WHERE pcs-1 >= 1 ) SELECT * FROM CTE ORDER BY id, pcs OPTION(MAXRECURSION 0)
这是一个演示供您尝试。