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

Chuyển đổi các cột động thành hàng

MySQL không có hàm UNPIVOT, nhưng bạn có thể chuyển đổi các cột của mình thành hàng bằng cách sử dụng UNION ALL .

Cú pháp cơ bản là:

select id, word, qty
from
(
  select id, 'abc' word, abc qty
  from yt
  where abc > 0
  union all
  select id, 'brt', brt
  from yt
  where brt > 0
) d
order by id;

Trong trường hợp của bạn, bạn nói rằng bạn cần một giải pháp cho các cột động. Nếu đúng như vậy, thì bạn sẽ cầ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(
      'select id, ''',
      c.column_name,
      ''' as word, ',
      c.column_name,
      ' as qty 
      from yt 
      where ',
      c.column_name,
      ' > 0'
    ) SEPARATOR ' UNION ALL '
  ) INTO @sql
FROM information_schema.columns c
where c.table_name = 'yt'
  and c.column_name not in ('id')
order by c.ordinal_position;

SET @sql 
  = CONCAT('select id, word, qty
           from
           (', @sql, ') x  order by id');


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

Xem SQL Fiddle with Demo



  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 lấy kích thước của bảng trong MySQL

  2. Xóa khỏi hai bảng trong một truy vấn

  3. PDO MySQL:Sử dụng PDO ::ATTR_EMULATE_PREPARES hay không?

  4. Làm thế nào để thực thi hai truy vấn mysql làm một trong PHP / MYSQL?

  5. NHÓM truy vấn MySQL THEO ngày / tháng / năm