Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Fügen Sie mehrere Zeilen in nur einer Zeile aus einer einzelnen Tabelle hinzu

Ich stimme den anderen Antworten zu, dass GROUP_CONCAT zusammen mit PHP, um die kommagetrennten Werte aufzuteilen, ist wahrscheinlich der beste Ansatz, aber wenn Sie aus irgendeinem anderen Grund die Ausgabe benötigen, die Sie über Pure SQL vorgeschlagen haben, würde ich einen der folgenden Ansätze vorschlagen.

1. Selbst beitreten

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. Verwendung einer Funktion vom Typ ROW_NUMBER zum Aggregieren

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