我有一個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說告訴我們你想要做什麼,所以給予像前端那樣「倍增」行的效果會更有意義。 –