sql >> Databasteknik >  >> RDS >> Mysql

Lägg till flera rader på bara en rad från en enda tabell

Jag håller med de andra svaren, att GROUP_CONCAT tillsammans med PHP för att dela upp de kommaseparerade värdena är förmodligen det bästa tillvägagångssättet, men om du av någon annan anledning behövde utdata du föreslog via Pure SQL skulle jag föreslå en av följande tillvägagångssätt.

1. Själv går med

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. Använder en ROW_NUMBER-typfunktion för att aggregera

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. lägg till en tillfällig kolumn med ett värde

  2. PHP-SQL:Uppladdad bild som visas som skräptext

  3. Returnera standardresultat för IN-värde oavsett

  4. Använda kolumnalias i fältet Sales Order Grid