Mysql
 sql >> база данни >  >> RDS >> Mysql

Mysql Преобразуване на колона в ред (Опорна таблица)

Това, което трябва да направите, е първо да развиете данните и след това да ги завъртите. Но за съжаление MySQL няма тези функции, така че ще трябва да ги репликирате с помощта на UNION ALL заявка за unpivot и агрегатна функция с CASE за опората.

Развъртането или UNION ALL piece взема данните от вашите col1, col2 и т.н. и ги превръща в няколко реда:

изберете идентификатор, месец, стойност на col1, 'col1' descrip от yourtableunion allselect id, month, col2 value, 'col2' descrip from yourtableunion allselect идентификатор, месец, col3 value, 'col3' descrip от yourtableunion allselect id col4 стойност, 'col4' описание от вашата таблица 

Вижте SQL Fiddle с демонстрация .

Резултат:

<предварителен код>| ID | МЕСЕЦ | СТОЙНОСТ | ОПИСАНИЕ |---------------------------------| 101 | януари | A | col1 || 102 | февруари | C | col1 || 101 | януари | Б | col2 || 102 | февруари | A | col2 || 101 | януари | (нула) | col3 || 102 | февруари | G | col3 || 101 | януари | Б | col4 || 102 | февруари | E | col4 |

След това увивате това в подзаявка, за да приложите агрегата и CASE за да конвертирате това в желания от вас формат:

изберете описание, макс(случай, когато месец ='ян', след това стойност друго 0 край) ян, макс (случай, когато месец ='февруари', след това стойност друго 0 край) febfrom( изберете идентификатор, месец, стойност на столбец1 , 'col1' описание от вашия таблицен съюз всички изберете идентификатор, месец, col2 стойност, 'col2' описание от вашия обединение на таблицата всички изберете идентификатор, месец, col3 стойност, 'col3' описание от вашия таблицен съюз всички изберете идентификатор, месец, col4 стойност, ' col4' описание от вашата таблица) srcгрупа по descrip 

Вижте SQL Fiddle с демонстрация

Резултатът е:

<предварителен код>| ОПИСАНИЕ | ЯН | ФЕВ |-----------------------| col1 | A | C || col2 | Б | A || col3 | 0 | G || col4 | Б | E |

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изпълня PHP, който се съхранява в MySQL база данни?

  2. Сравняване на времената за отказ на прокси сървъра на базата данни - ProxySQL, MaxScale и HAProxy

  3. Присъединете таблици от два различни сървъра

  4. Поръчайте MySQL таблица по две колони

  5. Как да изчислим общата сума в MySQL