UNPIVOT MySQL данные в другую таблицу

0

Привет, у меня есть следующие данные mysql

INSERT INTO 'monthly' ('id', 'year', 'stat_id', 'cat_id', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December') VALUES
(1, '2017', '12', '25', '1', '3', '1', '1', '3', '4', '4', '2', '4', '', '', ''),

и я хотел бы, чтобы это было так, чтобы быть таким

INSERT INTO 'monthlydata' ('id', 'year', 'monthName', 'stat_id', 'cat_id', 'data') VALUES
(1, '2017', 'January', '12', '25', '1'),
(2, '2017', 'February', '12', '25', '3'),
(3, '2017', 'March', '12', '25', '1'),
(4, '2017', 'April', '12', '25', '1'),
(5, '2017', 'May', '12', '25', '3'),
(6, '2017', 'June', '12', '25', '4'),
(7, '2017', 'July', '12', '25', '4'),
(8, '2017', 'August', '12', '25', '2'),
(9, '2017', 'September', '12', '25', '4'),
(10, '2017', 'October', '12', '25', ''),
(11, '2017', 'November', '12', '25', ''),
(12, '2017', 'December', '12', '25', ''),

есть ли более простой способ сделать это, используя mysql/php

  • 0
    INSERT INTO .. ВЫБРАТЬ ИЗ
  • 0
    Вы хотите преобразовать строку INSERT INTO используя PHP или существующие данные MySQL?
Показать ещё 4 комментария
Теги:

1 ответ

4
Лучший ответ

Вам нужно UNPIVOT ваши данные. MySQL не имеет встроенной функции для этого, поэтому вам нужно будет использовать несколько запросов.

INSERT INTO 'monthlydata' ('id', 'year', 'monthName', 'stat_id', 'cat_id', 'data') VALUES
SELECT id, year, 'January', stat_id, cat_id, January
    FROM monthly WHERE monthName = 'January'
UNION ALL 
SELECT id, year, 'February', stat_id, cat_id, February
    FROM monthly WHERE monthName = 'February'
UNION ALL 
SELECT id, year, 'March', stat_id, cat_id, March
    FROM monthly WHERE monthName = 'March'
.....

ID может вызвать проблемы. В зависимости от того, как вы его определили. Если он сгенерирован автоматически, вы можете удалить его из INSERT и дать ему автогенерировать. Поскольку у вас будут строки на все месяцы с одинаковым ID, вам необходимо обработать этот сценарий.

  • 1
    Спасибо, хороший ответ, спас мне работу по написанию этого ....
  • 0
    Спасибо, Бро .. это делает

Ещё вопросы

Сообщество Overcoder
Наверх
Меню