MySQL, как повторить ту же строку х раз - PullRequest
3 голосов
/ 15 мая 2011

У меня есть запрос, который выводит данные порядка адресов:

SELECT ordernumber
  , article_description
  , article_size_description
  , concat(NumberPerBox,' pieces') as contents
  , NumberOrdered
FROM customerorder
WHERE customerorder.id = 1;

Я бы хотел, чтобы вышеприведенная строка выводилась NumberOrders (например, 50000), деленная на NumberPerBox, например. 2000 = 25 раз.

Есть ли SQL-запрос, который может это сделать, я не против использования временных таблиц для объединения, если это то, что нужно.

Я проверил предыдущие вопросы, но ближайший:
должно быть возможно в MySQL повторить тот же результат
Только дал ответы, которые дают фиксированное количество строк, и мне нужно, чтобы он был динамическим в зависимости от значения (NumberOrdered div NumberPerBox).

Результат, который я хочу получить:

Boxnr   Ordernr        as_description   contents   NumberOrdered
------+--------------+----------------+-----------+---------------
  1   | CORDO1245    | Carrying bags  | 2,000 pcs | 50,000
  2   | CORDO1245    | Carrying bags  | 2,000 pcs | 50,000
....
  25  | CORDO1245    | Carrying bags  | 2,000 pcs | 50,000

1 Ответ

1 голос
/ 15 мая 2011

Во-первых, позвольте мне сказать, что я более знаком с SQL Server, поэтому в моем ответе есть некоторая предвзятость.
Во-вторых, я не тестировал пример кода и его, вероятно, следует использовать в качестве контрольной точки для запускас.

Мне кажется, что эта ситуация является основным кандидатом на таблицу чисел.Проще говоря, это таблица (обычно называемая «Числа»), которая представляет собой не что иное, как один столбец PK целых чисел от 1 до n.Как только вы используете таблицу Numbers и узнаете о том, как она используется, вы начнете находить много применений для нее - например, для запроса временных интервалов, разделения строк и т. Д.

Тем не менее, вот мой непроверенныйОтвет на ваш вопрос:

SELECT
   IV.number as Boxnr
  ,ordernumber  
  ,article_description
  ,article_size_description
  ,concat(NumberPerBox,' pieces') as contents
  ,NumberOrdered
FROM
  customerorder
  INNER JOIN (
    SELECT
       Numbers.number
      ,customerorder.ordernumber
      ,customerorder.NumberPerBox
    FROM
      Numbers
      INNER JOIN customerorder
        ON Numbers.number BETWEEN 1 AND customerorder.NumberOrdered / customerorder.NumberPerBox
    WHERE
      customerorder.id = 1
    ) AS IV
    ON customerorder.ordernumber = IV.ordernumber

Как я уже говорил, большая часть моего опыта связана с SQL Server.Я ссылаюсь http://www.sqlservercentral.com/articles/Advanced+Querying/2547/ (требуется регистрация).Однако при поиске «таблицы чисел SQL» появляется довольно много ресурсов.

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