【发布时间】:2019-05-09 17:25:43
【问题描述】:
我在 SQL Server 2014 中有这样的表:
IDSupply Qty PartName
---------------------------
1 2 C
2 4 B
3 50000 A
我想根据索引的 Qty 列将每一行重复 N 次(例如 C 从 1 到 4 作为索引)
问题是什么:我为此目标使用了 2 个查询,但它们只重复了 100 次,如下所示:
WITH tally AS
(
SELECT 1 n
UNION ALL
SELECT n + 1
FROM tally
)
SELECT partname, n.n Position
FROM supplylist t
JOIN tally n ON n.n <= t.qty
ORDER BY partname, Position
其他方法可以将每一行重复 32000 次,但我不能将其用作 CTE(因为 CTE 的 OPTION(MAXRECURSION 32500) 问题)
WITH Numbers(Num) AS
(
SELECT 1 AS Num
UNION ALL
SELECT Num + 1
FROM Numbers c
WHERE c.Num < 30000
)
SELECT partname, qty, num
FROM supplylist
JOIN Numbers ON supplylist.qty >= Numbers.Num
ORDER BY partname, num
OPTION(MAXRECURSION 32500)
注意:我不能在 CTE 结构中使用上述代码,如下所示:
WITH Numbers(Num) AS
(
SELECT 1 AS Num
UNION ALL
SELECT Num + 1
FROM Numbers c
WHERE c.Num < 30000
),
CTE as
(
SELECT partname,qty, num
FROM supplylist
JOIN Numbers ON supplylist.qty >= Numbers.Num
ORDER BY partname, num
OPTION(MAXRECURSION 32500)
)
SELECT *
FROM CTE
请帮助我无限制地做到这一点,并且 CTE 结构没有问题。
【问题讨论】:
标签: sql-server tsql sql-server-2014