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

Пивотна таблица с помощта на MySQL

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

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

изберете p.postid, max(случай, когато t.tagname ='Incident', след това p.value end) Инцидент, max(случай, когато t.tagname ='Location', след това p.value end) Location, max (случай, когато t.tagname ='Weapon', след което p.value край) Weaponfrom triples pleft join tags t on p.tagid =t.idgroup от p.postid; 

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

Но ако имате неизвестен брой колони, тогава ще трябва да използвате подготвен израз за генериране на динамичен SQL:

SET @sql =NULL;SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(CASE WHEN TagName =''', TagName, ''' THEN p.value END) КАТО `', TagName, '`' ) INTO @sqlFROM тагове;SET @sql =CONCAT('ИЗБЕРЕТЕ p.postid, ', @sql, ' от тройки p леви присъединителни тагове t на p.tagid =t.id група от p.postid');ПРИГОТВЯТЕ stmt ОТ @sql;ИЗПЪЛНЯВАНЕ на stmt;ПРЕКРАТЯВАНЕ НА ПОДГОТОВКА stmt; 

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

И двете ще дадат резултат:

<предварителен код>| POSTID | ИНЦИДЕНТ | МЕСТОПОЛОЖЕНИЕ | ОРЪЖИЕ |-------------------------------------------------------| 1 | Убийство | Ню Брънзуик | (нула) || 2 | Кражба | (нула) | Пистолет |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да „дехексирате“ число в MySQL

  2. Как да се справим с грешката във външния ключ на MySQL в PHP?

  3. MYSQL REGEXP търсене в JSON низ

  4. Пример за JDBC изявление – пакетно вмъкване, актуализиране, изтриване

  5. създаване на база данни за проследяване кои потребители са щракнали върху кои връзки?