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

преобразуване на ред в колона в mysql

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

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

изберете studentid, sum(случай, когато тема ='Java', след това маркирайте else 0 край) Java, sum(случай, когато тема ='C#', след това маркирайте else 0 край) `C#`, sum(случай, когато темата ='JavaScript', след което маркирайте else 0 край) JavaScript от вашата таблична група от studentid 

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

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

SET @sql =NULL;SELECT GROUP_CONCAT(DISTINCT CONCAT( 'sum(случай, когато тема =''', тема, ''', след което маркирайте друго 0 край) КАТО `', тема, ''' ) ) INTO @sqlFROM yourtable;SET @sql =CONCAT('ИЗБЕРЕТЕ studentid, ', @sql, ' от групата на вашата таблица от studentid');ПРИГОТОВЯТЕ stmt ОТ @sql;ИЗПЪЛНЯВАТЕ stmt;ПРЕЗПЕЧЕТЕ ПОДГОТВИТЕ stmt; 

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

Резултатът и за двете заявки е:

<предварителен код>| СТУДЕНТИК | JAVA | C# | JAVASCRIPT |----------------------------------------------| 10 | 46 | 65 | 79 || 11 | 66 | 85 | 99 |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разбор на изключително големи XML файлове в php

  2. създайте заявка за цикъл на дървовиден изглед

  3. MySQL по-устойчив ли е на атака с инжектиране на SQL от PostgreSQL (под Perl/DBI)?

  4. Преименувайте Mysql име на таблица с concat

  5. съкратена PDO заявка