我有一个Postgres 9.0查询返回的结果与此类似的方式:如何繁殖一行?
item;qty
AAAA;2
EEEE;3
我想什么是变换成:
AAAA
AAAA
EEEE
EEEE
EEEE
有没有什么办法可以做到这一点的简单,即没有存储过程,函数等?
我有一个Postgres 9.0查询返回的结果与此类似的方式:如何繁殖一行?
item;qty
AAAA;2
EEEE;3
我想什么是变换成:
AAAA
AAAA
EEEE
EEEE
EEEE
有没有什么办法可以做到这一点的简单,即没有存储过程,函数等?
有一个函数'generate_series'可用于生成值的表。这些可以被用来通过加入重复列:
select item
from data,generate_series(0,1000)
where generate_series<qty order by item;
SELECT
myTable.item
FROM
myTable
INNER JOIN
(SELECT 1 AS counter UNION ALL SELECT 2 UNION ALL SELECT 3) AS multiplier
ON multiplier.counter <= myTable.qty
增加根据您的最大值工会在qty
但我也想关注@ djacobson的建议数:说明你为什么要做到这一点,因为可能完全不同的方法。这样做的感觉,嗯,奇怪...
*使用这个与数量的思想不寒而栗> 5 * – NullUserException
@NullUserException:呃,有很多方法创建一个顺序的数字列表。更多的颤抖的想法是可以做这些结果:) – MatBailie
考虑以下演示:
CREATE TEMP TABLE x(item text, qty int);
INSERT INTO x VALUES
('AAAA',2)
,('EEEE',3)
,('IIII',4);
SELECT regexp_split_to_table(rtrim(repeat(item||'~#~',qty),'~#~'),'~#~') AS item
FROM x;
正好产生所要求的结果。
generate_series()
的解决方案快一个数量级。qty
。item
中的分隔符字符串。
[你尝试过什么?](http://mattgemmell.com/2008/12/08/what-have-you-tried/)除此之外...你的意思是说你已经挤满'item'和'qty'成一个文本列?如果是这样 - 不要这样做。问题解决了一半。 –
你会使用重复的值为什么?对于最终的问题,可能会有一个不那么尴尬的解决方案... –
我假设您在获取数据之后使用某种表示层;因为@djacobson说告诉我们你想要做什么,所以给予像前端那样“倍增”行的效果会更有意义。 –