sql >> Databáze >  >> RDS >> Mysql

Přidejte více řádků do jednoho řádku z jedné tabulky

Souhlasím s ostatními odpověďmi, že GROUP_CONCAT spolu s PHP je rozdělení hodnot oddělených čárkami pravděpodobně nejlepší přístup, ale pokud byste z jakéhokoli jiného důvodu potřebovali výstup, který jste navrhli přes Pure SQL, navrhl bych jeden z následujících přístupů.

1. Vlastní připojení

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. Použití funkce ROW_NUMBER Type k agregaci

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. Chyba Laravel PDOException v Connector.php řádku 55

  2. Co je STATISTICS XML v SQL Server?

  3. as3, připojení MySQL PHP

  4. Jak počítat dny kromě neděle mezi dvěma daty v Postgres?