Повторите строки в результате на основе целочисленного значения в столбце - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть следующая таблица.

Sales:
id      quantity    price_charged
------------------------------
101         2           100
102         3           300
103         1           120

Я хочу выбрать записи так, чтобы они повторяли строки N раз в соответствии со значением столбца количества.

Поэтому мне нужны следующие результаты

id    quantity    price_charged
--------------------------------
101     1          50
101     1          50
102     1          100
102     1          100
102     1          100
103     1          120

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Мне удалось найти решение для моей проблемы после обращения к ответу о том, как генерировать серии в mysql.Вот ссылка .

SELECT
  sal.id,
  1 as quantity, sal.quantity as originalQty,
  sal.price_charged/sal.quantity
FROM
  (SELECT
     @num := @num + 1 AS count
   FROM
     sales, -- this can be any table but it should have row count 
            -- more than what we expect the max value of Sales.quantity column
     (SELECT @num := 0) num
   LIMIT
     100) ctr
  JOIN sales sal
    ON sal.quantity >= ctr.count
    order by id;
0 голосов
/ 21 ноября 2018

Думаю, лучше разрешить не с помощью запроса (SQL).Существует некоторая функция генерации, но ее производительность низкая.

Вам необходимо изменить модель (хранить всегда 1 количество) или обработать ее в бэкэнде (java / c / stb.)

Select id, 
       1 as quantity, 
       price_charged 
from table_name t
JOIN 
(SELECT e*10000+d*1000+c*100+b*10+a n FROM
(select 0 a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t1,
(select 0 b union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t2,
(select 0 c union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t3,
(select 0 d union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t4,
(select 0 e union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t5) counter
ON (counter.n<=t.quantity)

Объединенный подзапрос повторяет числа от 0 до 99999, это максимальное количество записи.Повторение соединения по счетчику 0 ... количество-1 значений.

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