SQL 生成新行

SQL generate new rows

我有一个关注 table:

ShopId  NumberOfOrders
1       2
2       3
3       2
4       0

示例结果:

ShopId   OrderId
1        NULL
1        NULL
2        NULL
2        NULL
2        NULL
3        NULL
3        NULL

如何查询每个商店的 returns x 行数,其中 x 取决于 NumberOfOrders?

您需要一个号码列表。 spt_values 是在 SQL 服务器中获取整数列表的一种方法。对于此目的,值可能足够大:

with n as (
      select row_number() over (order by (select NULL)) as n
      from master..spt_values s
     )
select t.shopId, NULL as OrderId, n.n, t.NumberOfOrders
from following t join
     n
     on n.n <= t.NumberOfOrders

注:CTE也可以写成:

      select number as n
      from master..spt_values s
      where type = 'E'