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

MySQL - Tạo một bản ghi từ một cột

Những gì bạn đang yêu cầu về cơ bản là một PIVOT nhưng MySQL không có hàm pivot nên bạn có thể sao chép nó bằng cách sử dụng CASE câu lệnh với một hàm tổng hợp.

Nếu bạn biết các giá trị, thì bạn có thể mã hóa giải pháp tương tự như sau:

select id,
  max(case when component_id = 1 then data end) Email,
  max(case when component_id = 2 then data end) Firstname,
  max(case when component_id = 3 then data end) Lastname,
  max(case when component_id = 4 then data end) Phone
from yourtable
group by id;

Xem SQL Fiddle với Demo

Kết quả là:

| ID |            EMAIL |  FIRSTNAME |  LASTNAME |  PHONE |
-----------------------------------------------------------
|  1 | [email protected] | firstname1 | lastname1 | phone1 |
|  2 |           email2 | firstname2 | lastname2 | phone2 |

Tôi đoán rằng bạn có một bảng để liên kết component_id với một tên nên truy vấn của bạn cũng có thể là:

select t1.id,
  max(case when t2.name = 'email' then data end) Email,
  max(case when t2.name= 'FirstName' then data end) Firstname,
  max(case when t2.name= 'LastName' then data end) Lastname,
  max(case when t2.name= 'phone' then data end) Phone
from yourtable t1
inner join component t2
  on t1.component_id = t2.id 
group by t1.id;

Xem SQL Fiddle với Demo

Nếu bạn có một số lượng giá trị không xác định, thì bạn có thể sử dụng một câu lệnh đã chuẩn bị để tạo động truy vấn này:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when name = ''',
      name,
      ''' then data end) AS ',
      name
    )
  ) INTO @sql
FROM component;

SET @sql = CONCAT('SELECT t1.id, ', @sql, ' 
                  from yourtable t1
                  inner join component t2
                    on t1.component_id = t2.id 
                  group by t1.id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Xem SQL Fiddle with Demo

Tất cả các phiên bản sẽ cho bạn cùng một kết quả.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. nhiều chức năng là một chức năng lớn trong PHP?

  2. Khung thực thể - MySQL - Vấn đề định dạng ngày giờ

  3. Cách kết nối với cơ sở dữ liệu bằng ứng dụng khách NaviCat MySQL

  4. Độ sâu trong MYSQL và Cây trên bàn đóng cửa

  5. Làm thế nào để chèn nhiều hàng trong cơ sở dữ liệu mysql cùng một lúc với các câu lệnh đã chuẩn bị?