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

chuyển đổi hàng thành cột trong mysql

Loại chuyển đổi dữ liệu này được gọi là pivot . MySQL không có hàm pivot, vì vậy bạn sẽ muốn chuyển đổi dữ liệu bằng cách sử dụng hàm tổng hợp với CASE biểu thức.

Nếu bạn biết trước các giá trị cần chuyển đổi, thì bạn có thể mã hóa chúng tương tự như sau:

select studentid,
  sum(case when subject = 'Java' then mark else 0 end) Java,
  sum(case when subject = 'C#' then mark else 0 end) `C#`,
  sum(case when subject = 'JavaScript' then mark else 0 end) JavaScript
from yourtable
group by studentid

Xem SQL Fiddle with Demo .

Nếu các giá trị của chủ đề không xác định hoặc linh hoạt, thì bạn có thể muốn sử dụng một câu lệnh đã chuẩn bị để tạo sql động:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'sum(case when subject = ''',
      subject,
      ''' then mark else 0 end) AS `',
      subject, '`'
    )
  ) INTO @sql
FROM  yourtable;

SET @sql = CONCAT('SELECT studentid, ', @sql, ' 
                  from yourtable
                  group by studentid');

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

Xem SQL Fiddle with Demo .

Kết quả cho cả hai truy vấn là:

| STUDENTID | JAVA | C# | JAVASCRIPT |
--------------------------------------
|        10 |   46 | 65 |         79 |
|        11 |   66 | 85 |         99 |



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách CHỌN dựa trên giá trị của một CHỌN khác

  2. Cách tạo chỉ mục trên nhiều cột

  3. Truy vấn được tham số hóa trả về (các) cột TEXT luôn trả về 0 cho các cột INT

  4. Sử dụng MySQL, làm cách nào để chọn xếp hạng kết quả truy vấn của một hàng cụ thể?

  5. Thêm nhiều dữ liệu với khoảng thời gian nhất định trong Java