Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Transposisi Kolom Dinamis ke Baris

MySQL tidak memiliki fungsi UNPIVOT, tetapi Anda dapat mengubah kolom menjadi baris menggunakan UNION ALL .

Sintaks dasarnya adalah:

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;

Dalam kasus Anda, Anda menyatakan bahwa Anda memerlukan solusi untuk kolom dinamis. Jika demikian, maka Anda perlu menggunakan pernyataan yang telah disiapkan untuk menghasilkan SQL dinamis:

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;

Lihat SQL Fiddle dengan 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. Melewati parameter ke JDBC PreparedStatement

  2. mysqli atau mati, apakah harus mati?

  3. Bagaimana cara mengubah nama tabel MySQL di server Linux menjadi tidak peka huruf besar-kecil?

  4. MySQL Memberikan Hak Istimewa kepada Pengguna untuk Database

  5. MySQL Ubah Kata Sandi Pengguna