SQL生成新行

时间:2015-03-23 11:08:23

标签: sql sql-server join rows

我有一张桌子:

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

如何为每个商店返回x个行的查询,其中x取决于NumberOfOrders?

1 个答案:

答案 0 :(得分:3)

您需要一个数字列表。 spt_values是获取SQL Server中的整数列表的一种方法。这些值可能足以达到此目的:

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'