Как умножить строку? - PullRequest
       2

Как умножить строку?

0 голосов
/ 30 ноября 2011

У меня есть запрос Postgres 9.0, возвращающий результаты примерно так:

item;qty
AAAA;2
EEEE;3

Я хотел бы преобразовать это в:

AAAA
AAAA
EEEE
EEEE
EEEE

Есть ли способ, которым я могу сделать это на простом, то есть без хранимых процедур, функций и т. Д.?

Ответы [ 3 ]

2 голосов
/ 30 ноября 2011

Есть функция «generate_series», которую можно использовать для генерации таблицы значений.Их можно использовать для повторения столбца путем объединения:

select item 
from data,generate_series(0,1000) 
where generate_series<qty order by item; 
2 голосов
/ 30 ноября 2011

Рассмотрим следующую демонстрацию:

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.
0 голосов
/ 30 ноября 2011
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: объясните, почему вы хотите это сделать, поскольку этот подход может быть совершенно другим.Делать это чувствует, ммм, странно ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...