Задавайте вопросы, мы ответим
Вы не зашли.
Привет Всем! Возник вопрос по объединению нескольких столбцов данных(цифр) в другой столбец другой таблицы, причем так чтоб данные расположились друг под другом! Точнее есть данные на каждый месяц и они расположены помесячно в каждом столбце "месяц", а нужно собрать в столбец "год" другой таблицы! вроде всё просто но операцию нужно проводить с многими таблицами(данных очень много) !
Неактивен
Проще всего это сделать с помощью UNION:
INSERT INTO yeartable (data) SELECT january FROM monthtable UNION SELECT february FROM monthtable ...
Неактивен
O! Благодарю! всё гениальное просто! хотя для такого новичка как я ,видимо это пока ещё .... Пойду пробовать !
Неактивен
А вот ещё вопрос возник по ходу: как можно транспонировать таблицу в MySQL?
Неактивен
Стандартными средствами - никак. Базы данных не разрабатывались как
способ представления матриц. Представьте себе, сколько колонок будет
содержать транспонированная таблица, которая содержит 100 миллионов строк.
Но если Ваша табличка маленькая, Вы можете загрузить ее в память,
транспонировать и выгрузить назад. Например, можно это сделать через
SELECT INTO OUTFILE в CSV, Excel/OOCalc и LOAD DATA INFILE.
Если Вы бьетесь над таблицей с месяцами, можете написать какой-нибудь
хитрый запрос. Например, так:
SELECT SUM(IF(month=1,value,0)) AS Jan, SUM(IF(month=2,value,0)) AS Feb, ... FROM table
Неактивен
Вот небходимо получить данные в такую таблицу :
DD MM YY Max_Temp MinTemp Average ------------------------------------------------------- 01 01 1930 -10 -20 -15 02 01 1930 -11 -21 -16 03 01 1930 -10 -20 -15 .... ... ....... ..... ..... .....
А щас они ввиде:
DD | 01 02 03 04 05 ... -----------------+------------------------------- 01 1930 Max_temp | -10 -11 -10 -12 -12 ... 02 1930 Min_temp | -20 -21 -20 -22 -23 ... 03 1930 Average | -15 -16 -15 -16.5 -17 ... .. ..... ....... | ... ... ... ... ...
каким образом можно призвести такой "переворот" ?
Отредактированно corsarr (05.06.2007 13:36:49)
Неактивен
Если дат много - то проще в экселе.
Если нет - то можно сделать это в несколько этапов. Для начала, собрать
все данные по группам:
SELECT CONCAT_WS(' ', MM, YY, 'Max_temp') AS DD, SUM(IF(DD='01',Max_temp,0)) AS '01', SUM(IF(DD='02',Max_temp,0)) AS '02', ... FROM table GROUP BY YY,MM
Очевидно, что таких запросов будет столько, сколько параметров (Max_temp, Min_temp, ...).
Далее их надо объединить и отсортировать в нужном виде:
SELECT * FROM ( SELECT ... Max_temp ... UNION SELECT ... Min_temp ... ) t ORDER BY DD
Можете попробовать переписать этот запрос через PREPARE, тогда, возможно,
Вам удастся сделать динамическое количество столбцов... но стоит ли оно таких
усилий?
Неактивен