Repeat Rows N Times According to Column Value, Without Limit in Repeating(按列值重复行N次,重复次数不限)
本文介绍了按列值重复行N次,重复次数不限的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在SQL Server 2014中有一个类似的表:
IDSupply Qty PartName
---------------------------
1 2 C
2 4 B
3 50000 A
我想根据带有索引的数量列将每行重复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结构的问题。
推荐答案
芬利我找到了解决方案。我们不能在CTE结构中使用"Option(MAXRECURSION 0)",但可以将查询用作函数,并使用"Option(MAXRECURSION 0)"调用和运行如下函数:
Create fnCreateIndex
(
@Pr1 Int
)
RETURNS TABLE
AS
RETURN
(
WITH Numbers(Num) AS
(
SELECT 1 AS Num
UNION ALL
SELECT Num + 1
FROM Numbers c
WHERE c.Num < @Pr1),
CTE as
(
SELECT partname, qty, num
FROM supplylist
JOIN Numbers ON supplylist.qty >= Numbers.Num
)
Select * from cte
)
最后,我们可以使用它来获得结果:
select * from fnCreateIndex (50000) order by partname, num OPTION(MAXRECURSION 0)
我根据https://stackoverflow.com/a/7428903/4885037
找到解决方案这篇关于按列值重复行N次,重复次数不限的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:按列值重复行N次,重复次数不限


猜你喜欢
- HEROKU - 无法运行 git push heroku master 2021-01-01
- MySQL(Windows10)使用 MyISAM 表进行 FULLTEXT 搜索不起作用 2022-01-01
- SQL Server 将 Varchar 转换为日期时间 2021-01-01
- 创建索引时,具有 mysql 数据库迁移的实体框架失败 2022-01-01
- SSMS 中的权限问题:“对象 'extended_properties'、数据库 'mssqlsystem_resource'、... 错误 229)上的 SELECT 权限被拒绝" 2022-01-01
- Oracle SQL 转置 2022-01-01
- MySql 错误 150 - 外键 2021-01-01
- 如何在oracle中获取字符串最右边的10个位置 2021-01-01
- 在 Oracle 中创建 CTE 2022-01-01
- 如何将uuid存储为数字? 2021-01-01