我的数据库中的一个表包含带有申请编号和其他相关信息的行。我正在尝试创建第二个表(用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()值进行排序,但它是根据请购单值的实例对行进行编号,而不是根据数量值。
您需要递归方式:
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)。
非递归方式:
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)
| 归档时间: |
|
| 查看次数: |
6510 次 |
| 最近记录: |