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

MySQL - Направете един запис от колона

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

Ако знаете стойностите, тогава можете да кодирате решението подобно на това:

изберете идентификатор, макс(случай, когато компонент_id =1, след това край на данните) Имейл, макс(случай, когато component_id =2, след това край на данните) Първо име, макс случай, когато идентификатор_компонент =4, след това данните край) Телефон от вашата таблицагрупа по идентификатор; 

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

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

<предварителен код>| ID | ИМЕЙЛ | ПЪРВО ИМЕ | ФАМИЛИЯ | ТЕЛЕФОН |------------------------------------------------ -----------| 1 | [email protected] | име1 | фамилия1 | телефон1 || 2 | имейл2 | име2 | фамилия2 | телефон 2 |

Предполагам, че имате таблица за свързване на component_id с име, така че вашата заявка също може да бъде:

изберете t1.id, max(случай, когато t2.name ='email' след това край на данните) Email, max(случай, когато t2.name='FirstName', след това край на данните) Първо име, max(случай, когато t2 .name='LastName' след това край на данните) Фамилно име, максимум (случай, когато t2.name='телефон', след това край на данните) Телефон от вашата таблица t1inner join компонент t2 на t1.component_id =t2.id група от t1.id; 

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

Ако имате неизвестен брой стойности, тогава можете да използвате подготвен израз, за ​​да генерирате тази заявка динамично:

SET @sql =NULL;SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(случай, когато име =''', име, ''' след това край на данните) AS ', име ) ) INTO @sqlFROM компонент;SET @sql =CONCAT('ИЗБЕРЕТЕ t1.id, ', @sql, ' от вашата таблица t1 вътрешен компонент за присъединяване t2 на t1.component_id =t2.id група от t1.id');ПРИГОТВЕТЕ stmt ОТ @sql;ИЗПЪЛНЕТЕ stmt;ОТМЕНИ ПОДГОТВЕТЕ stmt; 

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

Всички версии ще ви дадат един и същ резултат.




  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 echo първия ред изчакване/спи след това ехо втория ред

  2. изтрийте дублиращи се редове и трябва да запазите един от всички тях в mysql

  3. Мога ли да съхранявам изображения в MySQL

  4. MySQL актуализиране или преименуване на ключ в JSON

  5. PHP Не е избрана база данни