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

MySQL Присъединете множество редове като колони

INNER JOIN ще задоволи вашите нужди. MySQL няма PIVOT функция от все още можете да я симулирате с помощта на CASE и MAX() функция.

SELECT  a.ID, a.NAME,
        MAX(CASE WHEN b.Race_Number = 1 THEN b.Place ELSE NULL END) Race1,
        MAX(CASE WHEN b.Race_Number = 2 THEN b.Place ELSE NULL END) Race2,
        MAX(CASE WHEN b.Race_Number = 3 THEN b.Place ELSE NULL END) Race3
FROM    Table1 a
        INNER JOIN Table2 b
            ON a.ID = b.ID
GROUP   BY a.ID, a.Name

Но ако имате неизвестен номер на RACE , след това DYNAMIC SQL е много по-предпочитан.

SET @sql = NULL;
SELECT
    GROUP_CONCAT(DISTINCT
    CONCAT('MAX(CASE WHEN b.Race_Number = ', Race_Number,
      ' THEN b.Place END) AS ', CONCAT('`Race', Race_Number, '`'))
    ) INTO @sql
FROM Table2;

SET @sql = CONCAT('SELECT s.Student_name, ', @sql, ' 
                   FROM Table1 a
                   LEFT JOIN Table2 b 
                        ON ON a.ID = b.ID
                   GROUP   BY a.ID, a.Name');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да съхранявате уникален идентификатор за регистрация на GCM в MySQL

  2. получите общо за лимит в mysql, като използвате същата заявка?

  3. Грешка при използване на персонализирана DQL функция с Doctrine и Symfony2

  4. Как да копирате база данни SQLite от Android в MySQL база данни (репликация/синхронизация)

  5. Красноречив laravel WhereIn All