Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Thêm nhiều hàng chỉ trong một hàng từ một bảng

Tôi đồng ý với các câu trả lời khác, rằng GROUP_CONCAT cùng với PHP để phân chia các giá trị được phân tách bằng dấu phẩy có lẽ là cách tốt nhất, tuy nhiên nếu vì bất kỳ lý do nào khác mà bạn cần đầu ra mà bạn đã đề xuất thông qua Pure SQL, tôi sẽ đề xuất một trong các cách giải quyết sau.

1. Tự tham gia

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. Sử dụng hàm Loại ROW_NUMBER để tổng hợp

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. Thời gian đã trôi qua từ một thời điểm nhất định trong cơ sở dữ liệu

  2. Chọn các hàng giữa một hàng được chỉ định đến một số hàng với điều kiện cụ thể

  3. Java - Ngoại lệ trong luồng chính java.lang. Lỗi:Các vấn đề biên dịch chưa được giải quyết

  4. Cách lấy năm từ cột ngày giờ trong MySQL

  5. Truy cập cơ sở dữ liệu MySQL bằng c # trên thống nhất?