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

Menggunakan @DECLARE di MYSQL 5.1

MySQL Tidak memiliki pivot fungsi sehingga Anda harus mentranspos data dari baris ke kolom menggunakan fungsi agregat dengan CASE ekspresi:

select 
  sum(case when tt.type = 'UnitTest' then 1 else 0 end) UnitTest,
  sum(case when tt.type = 'WebTest' then 1 else 0 end) WebTest
from test t
inner join test_type tt
  on t.test_type = tt.id

Lihat SQL Fiddle dengan Demo .

Jika Anda akan memiliki jumlah types yang tidak diketahui yang ingin Anda konversi ke kolom, Anda dapat menggunakan pernyataan yang disiapkan untuk menghasilkan SQL dinamis:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'sum(CASE WHEN tt.type = ''',
      type,
      ''' THEN 1 else 0 END) AS `',
      type, '`'
    )
  ) INTO @sql
FROM test_type;

SET @sql 
  = CONCAT('SELECT ', @sql, ' 
            from test t
            inner join test_type tt
              on t.test_type = tt.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. INNER JOIN meja yang sama

  2. Bagaimana cara menggunakan MySQL Found_Rows() di PHP?

  3. masalah instalasi mysql-python (di mac os x lion)

  4. Dapatkan Gambar dari Database MySQL - C#

  5. Bagaimana cara membuat partisi untuk setiap bulan di tahun ini