表1 包含以下2列和4行:
Entity Number
------ ------
Car 4
Shop 1
Apple 3
Pear 1
我希望有一个基于SQL的查询集,它会产生以下所需的结果。基本上按“数字”列中的次数复制实体。
我只能通过逐行循环来实现,这不是很优雅,也不是基于设置。
期望的结果:
Entity
------
Car
Car
Car
Car
Shop
Apple
Apple
Apple
Pear
答案 0 :(得分:4)
一种方法使用递归CTE:
with cte as (
select t1.entity, t1.number
from table1 t1
union all
select cte.entity, cte.number - 1
from cte
where cte.number > 0
)
select entity
from cte;
注意:使用默认设置,每个实体限制为100行。您可以使用OPTION (MAXRECURSION 0)
解决此问题。
您也可以使用数字表解决此问题,但这样的问题是对递归CTE的一个很好的介绍。
答案 1 :(得分:2)
使用此
{{1}}
答案 2 :(得分:2)
非递归解决方案,将使用固定的序列号,然后根据此数字加入表格,如下所示:
WITH numbers
AS
(
SELECT n
FROM (VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9), (10)) AS numbers(n)
)
SELECT t.Entity
FROM Table1 AS t
INNER JOIN numbers as n ON t.number >= n.n;
这将支持最多10次重复,您可以添加额外的数字以支持额外的重复时间。
答案 3 :(得分:1)