我有一个Postgres 9.0查询以类似于此的方式返回结果:
item;qty
AAAA;2
EEEE;3
我想要的是将其转化为:
AAAA
AAAA
EEEE
EEEE
EEEE
我有什么办法可以简单地做到这一点,即没有存储过程,函数等?
答案 0 :(得分:2)
有一个'generate_series'函数可用于生成值表。这些可用于通过加入重复列:
select item
from data,generate_series(0,1000)
where generate_series<qty order by item;
答案 1 :(得分:2)
考虑以下演示:
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
中的分隔符字符串。答案 2 :(得分:0)
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的建议:解释你为什么要这样做,因为这可能是一个完全不同的方法。这样做感觉,嗯,奇怪......