SQL:展开集合

Fly*_*wat 2 sql t-sql

假设我在SQL中有一个这样的集:

    Product | Quantity
       A         1
       B         2
Run Code Online (Sandbox Code Playgroud)

我希望(在单个SELECT语句中)将其转换为:

    Product 
       A    
       B    
       B
Run Code Online (Sandbox Code Playgroud)

任何人都可以指出我(最好是T-SQL),如何做到这一点的诀窍?

cas*_*One 6

您需要一个中间数字表或一个表值函数(如果您可以使用该选项),它将生成数字.

假设您有一个Numbers表,其填充方式如下:

    Number
    ------
         1
         2
       ...
    100000
Run Code Online (Sandbox Code Playgroud)

(或者你需要的那么大,并且有生成大尺寸数字表的有效机制)

然后,您将发出以下查询:

select
    p.Product
from
    Products as p
        inner join Numbers as n on n.Number <= p.Quantity 
Run Code Online (Sandbox Code Playgroud)

这将产生您想要的结果.

数字表在SQL中非常有用,而且Itzik Ben-Gan在他的书中(在他的网站上列出)进入了它和其他伟大的查询技术.我强烈推荐他们.