select id, group_concat(`Name` separator ',') as `ColumnName`
from
(
select
id,
concat(`Name`, ':', group_concat(`Value` separator ',')) as `Name`
from mytbl
group by
id,
`Name`
) tbl
group by id;
Bạn có thể thấy nó được triển khai tại đây: Sql Fiddle Demo . Chính xác những gì bạn cần.
Cập nhật Chia thành hai bước. Đầu tiên, chúng ta nhận được một bảng có tất cả các giá trị (được phân tách bằng dấu phẩy) so với một [Tên, id] duy nhất. Sau đó, từ bảng đã thu được, chúng tôi nhận được tất cả các tên và giá trị dưới dạng một giá trị duy nhất so với mỗi id duy nhất. Xem điều này được giải thích tại đây Bản trình diễn SQL Fiddle (cuộn xuống vì nó có hai tập kết quả)
Chỉnh sửa Đã xảy ra lỗi khi đọc câu hỏi, tôi chỉ nhóm theo id. Nhưng hai group_contacts là cần thiết nếu (Các giá trị phải được nối nhóm theo Tên và id và sau đó trên tất cả bởi id). Câu trả lời trước đó là
select
id,group_concat(concat(`name`,':',`value`) separator ',')
as Result from mytbl group by id
Bạn có thể thấy nó được triển khai tại đây: SQL Fiddle Demo