我尽量避免使用游标——数据量真的很大。有一张表,看起来像:
|Data| Multiplier|
-----------------|
|A | 2 |
|B | 3 |
|C | 0 |
我需要通过以下方式从中获取数据:
|Data| Multiplier|
-----------------|
|A | 2 |
|A | 2 |
|B | 3 |
|B | 3 |
|B | 3 |
这样该行出现的次数与它的“乘数”值一样多。
我知道可以在 Oracle 数据库中使用 CONNECT 语句,但我需要在 MSSQL 中使用。
最佳答案
如果数字不是很大,我只会使用递归 CTE:
with cte as (
select data, 1 as n, multiplier
from t
where multiplier > 0
union all
select data 1 + n, multiplier
from cte
where n < multiplier
)
select data, multiplier
from cte;
还有其他方法,也使用数字:
select t.data, t.multiplier
from t join
(select row_number() over (order by (select null)) as n
from master..spt_values v
) n
on n.n <= t.multiplier;
关于sql - SELECT 语句中的重复行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50987775/