sql >> Database >  >> RDS >> Mysql

Voeg meerdere rijen toe in slechts één rij vanuit een enkele tabel

Ik ben het eens met de andere antwoorden, dat GROUP_CONCAT samen met PHP om de door komma's gescheiden waarden te splitsen is waarschijnlijk de beste aanpak, maar als je om een ​​andere reden de uitvoer nodig hebt die je via Pure SQL hebt voorgesteld, zou ik een van de volgende benaderingen voorstellen.

1. Zelf lid worden

SELECT  t1.Name, 
        MIN(t1.Subject) AS Sub1,
        MIN(t2.Subject) AS Sub2,
        MIN(t3.Subject) AS Sub3,
        MIN(t4.Subject) AS Sub4
FROM    Students t1
        LEFT JOIN Students T2 
            ON t1.Name = t2.Name 
            AND t2.Subject > t1.Subject
        LEFT JOIN Students T3 
            ON t2.Name = t3.Name 
            AND t3.Subject > t2.Subject
        LEFT JOIN Students T4 
            ON t3.Name = t4.Name 
            AND t4.Subject > t3.Subject
GROUP BY t1.Name;

2. Een ROW_NUMBER Type-functie gebruiken om te aggregeren

SELECT   Name,
         MAX(IF(RowNum = 1,Subject, NULL)) AS Sub1,
         MAX(IF(RowNum = 2,Subject, NULL)) AS Sub2,
         MAX(IF(RowNum = 3,Subject, NULL)) AS Sub3,
         MAX(IF(RowNum = 4,Subject, NULL)) AS Sub4
FROM     (    SELECT   Name,
                       Subject,
                       @r:= IF(@Name = Name, @r + 1, 1) AS RowNum,
                       @Name:= Name AS Name2
              FROM    Students,
                      (SELECT @Name:='') n,
                      (SELECT @r:= 0) r
              ORDER BY Name, Sno
          ) t
GROUP BY Name


  1. 2019 Open Source Database Report:Topdatabases, Public Cloud vs. On-Premise, Polyglot Persistence

  2. Een Flask-SQLAlchemy-update creëert een nieuw record in MySQL

  3. OracleCommand SQL-parameters Binding

  4. Verbinding maken met MySQL die op Docker draait vanaf de hostcomputer