SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 01.06.2007 12:15:27

corsarr
Участник
Зарегистрирован: 01.06.2007
Сообщений: 4

Объединенние нескольких столбцов в один

Привет Всем! Возник вопрос по объединению нескольких столбцов данных(цифр) в другой столбец другой таблицы, причем так чтоб данные расположились друг под другом! Точнее есть данные на каждый месяц и они расположены помесячно в каждом столбце "месяц", а нужно собрать в столбец "год" другой таблицы! вроде всё просто но операцию нужно проводить с многими таблицами(данных очень много) !

Неактивен

 

#2 01.06.2007 13:50:46

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Объединенние нескольких столбцов в один

Проще всего это сделать с помощью UNION:

Код:

INSERT INTO yeartable (data)
SELECT january FROM monthtable
UNION
SELECT february FROM monthtable
...

Неактивен

 

#3 01.06.2007 20:36:37

corsarr
Участник
Зарегистрирован: 01.06.2007
Сообщений: 4

Re: Объединенние нескольких столбцов в один

O!  Благодарю! всё гениальное просто! хотя для такого новичка как я ,видимо это пока ещё .... Пойду пробовать !

Неактивен

 

#4 05.06.2007 12:18:54

corsarr
Участник
Зарегистрирован: 01.06.2007
Сообщений: 4

Re: Объединенние нескольких столбцов в один

А вот ещё вопрос возник по ходу: как можно транспонировать таблицу в MySQL?

Неактивен

 

#5 05.06.2007 13:17:02

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Объединенние нескольких столбцов в один

Стандартными средствами - никак. Базы данных не разрабатывались как
способ представления матриц. Представьте себе, сколько колонок будет
содержать транспонированная таблица, которая содержит 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

Неактивен

 

#6 05.06.2007 13:30:22

corsarr
Участник
Зарегистрирован: 01.06.2007
Сообщений: 4

Re: Объединенние нескольких столбцов в один

Вот небходимо получить данные в такую таблицу :

Код:

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)

Неактивен

 

#7 05.06.2007 13:48:53

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Объединенние нескольких столбцов в один

Если дат много - то проще в экселе.

Если нет - то можно сделать это в несколько этапов. Для начала, собрать
все данные по группам:

Код:

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, тогда, возможно,
Вам удастся сделать динамическое количество столбцов... но стоит ли оно таких
усилий?

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson