我尽量避免使用游标——数据量真的很大。有一张表,看起来像:

|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/

10-16 06:30