如何将行扩展为多行结果集?

Leg*_*let 5 sql sql-server sql-server-2008

我有一个表,我试图根据第二列值将每行分成一行或多行.像这样:

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
Run Code Online (Sandbox Code Playgroud)

我在SQL Server 2008中将其写为sproc.我最好的解决方案是使用游标并将[pcs]行数添加到表中每行的临时表中.似乎必须有一个比我更缺失的简单解决方案.谢谢.

Lam*_*mak 6

您可以使用递归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)
Run Code Online (Sandbox Code Playgroud)

这是一个你可以尝试的演示.