Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dodaj wiele wierszy w jednym wierszu z jednej tabeli

Zgadzam się z innymi odpowiedziami, że GROUP_CONCAT wraz z PHP, aby podzielić wartości oddzielone przecinkami, jest prawdopodobnie najlepszym podejściem, jednak jeśli z jakiegokolwiek innego powodu potrzebujesz danych wyjściowych, które zasugerowałeś za pomocą Pure SQL, sugerowałbym jedno z poniższych podejść.

1. Połączenia własne

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. Używanie funkcji typu ROW_NUMBER do agregowania

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. błąd 1064(42000) podczas próby wykonania polecenia mysqldump

  2. Ostateczny koszmar dotyczący starszych baz danych MySQL

  3. MySQL Query ORDER BY pewne wartości przed innymi

  4. Jak wstawić francuskie znaki w tabeli mySQL DB?

  5. Zrozumienie indeksów wielu kolumn w zapytaniu MySQL