Този тип преобразуване на данни е известен като опорна точка . 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 |