假设我在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),如何做到这一点的诀窍?
您需要一个中间数字表或一个表值函数(如果您可以使用该选项),它将生成数字.
假设您有一个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在他的书中(在他的网站上列出)进入了它和其他伟大的查询技术.我强烈推荐他们.