根据列值生成行

Ste*_*n F 9 sql sql-server

我的数据库中的一个表包含带有申请编号和其他相关信息的行。我正在尝试创建第二个表(用INSERT INTO语句填充)来复制这些行并根据QuantityOrdered列中的值添加一个系列值。

例如,第一个表如下所示:

+-------------+----------+
| Requisition | Quantity |
+-------------+----------+
| 10001_01_AD |    4     |
+-------------+----------+
Run Code Online (Sandbox Code Playgroud)

我希望输出如下:

+-------------+----------+----------+
| Requisition | Quantity |  Series  |
+-------------+----------+----------+
| 10001_01_AD |     4    |     1    |
| 10001_01_AD |     4    |     2    |
| 10001_01_AD |     4    |     3    |
| 10001_01_AD |     4    |     4    |
+-------------+----------+----------+
Run Code Online (Sandbox Code Playgroud)

我一直在尝试对Row_Number()值进行排序,但它是根据请购单值的实例对行进行编号,而不是根据数量值。

Yog*_*rma 6

您需要递归方式:

with t as (
     select Requisition, 1 as start, Quantity
     from table
     union all
     select Requisition, start + 1, Quantity
     from t
     where start < Quantity
 ) 
select Requisition, Quantity, start as Series  
from t; 
Run Code Online (Sandbox Code Playgroud)

但是,默认情况下它仅限于 100 Quantities,如果您有更多,则需要使用 指定查询提示option (maxrecursion 0)


Luk*_*zda 6

非递归方式:

SELECT *
FROM tab t
CROSS APPLY (SELECT n
             FROM (SELECT ROW_NUMBER() OVER(ORDER BY 1/0) AS n
                   FROM master..spt_values s1) AS sub
             WHERE  sub.n <= t.Quantity) AS s2(Series);
Run Code Online (Sandbox Code Playgroud)

db<>小提琴演示