У меня есть следующая структура данных в файле .CSV:
Name Month1 Month2 Month3
Name1 40 20 10
Name2 14 10 11
Мне нужно загрузить эти данные в следующую структуру
Name Month Value
Name1 1 40
Name1 2 20
...
Моя идея - выполнить файл данных загрузки внутри цикла. В первый раз читать только информацию о месяце 1, во второй раз загружать только информацию о месяце 2 и далее.
Код моего файла данных загрузки будет примерно таким:
LOAD DATA LOCAL INFILE '/file.csv'
INTO TABLE demo.test
FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(NAME, @var1, @var2, @var3)
SET QTD = @var1;
Есть ли способ определить @ var1 динамически? Таким образом, для первого взаимодействия временная переменная, используемая для определения QTD, будет «var1», для второго взаимодействия будет «var2» и т. д.
С уважением,
2-й вариант в предыдущем комментарии. Не делайте первое ... намного медленнее.
Jup вам нужно использовать промежуточную таблицу, в которую вы импортируете таблицу, и используйте метод unpivot или столбец для записи преобразования (используйте UNION ALL), поэтому вам нужно два запроса для этого .... Или вы создаете собственный синтаксический анализатор CVS с MySQL LOAD_FILE ( ) (dev.mysql.com/doc/refman/8.0/en/…) в сочетании с некоторыми генераторами чисел SQL и вложенными функциями SUBSTRING_INDEX, чтобы вы могли разделить записи и столбцы из этого файла CVS, который вы используете в качестве доставленной таблицы для запроса INSERT INTO ... SELECT ..






Да, конечно возможно с петлей
WHILE(dev.mysql.com/doc/refman/8.0/en/ while.html). Вы также можете просто загрузить файл CSV в промежуточную таблицу как есть и использоватьINSERT INTOдля заполнения окончательных таблиц (dev.mysql.com/doc/refman/8.0/en/…)