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

Tampilkan kolom ukuran sebagai baris untuk setiap produk warna dalam tabel terkait?

Tidak ada perintah PIVOT (MySQL tabel pivot (mengubah baris menjadi kolom) ) di MySQL sehingga kueri Anda akan statis untuk ukuran. Itu sebabnya lebih baik untuk menunda ini dalam aplikasi.

Pikir jika Anda hanya memiliki domain yang terbatas dan kecil untuk kolom ukuran maka Anda dapat menggunakan Kueri berikut yang saya posting di bawah ini:

mysql> SELECT 
    ->      c.color as color,
    ->      SUM(IF(s.size = 32, o.amount, 0)) as '32',
    ->      SUM(IF(s.size = 34, o.amount, 0)) as '34',
    ->      SUM(IF(s.size = 36, o.amount, 0)) as '36',
    ->      SUM(IF(s.size = 38, o.amount, 0)) as '38'
    ->  FROM `colors` c
    ->  INNER JOIN `order` o
    ->  INNER JOIN `sizes` s
    ->      WHERE c.`id` = o.`color` and s.`id` = o.`size`
    -> GROUP BY color 
    -> ;
+-------+------+------+------+------+
| color | 32   | 34   | 36   | 38   |
+-------+------+------+------+------+
| blue  |    3 |    4 |    2 |    0 |
| red   |    1 |    0 |    0 |    0 |
+-------+------+------+------+------+
2 rows in set (0.04 sec)

Seperti yang Anda lihat dalam kondisi JIKA saya menggunakan nilai ukuran yang saya maksud pertanyaannya statis. Saya berasumsi semua ukuran yang mungkin bisa 32, 34, 36, 38.

Demo kerja @SQL Fiddle

Sunting:Seperti yang saya katakan dari awal Jika nilai ukuran tidak diketahui atau domain besar maka lebih baik Anda menunda pekerjaan pivot dalam skrip server Anda (mis. PHP) Anda masih dapat menggunakan kueri berikut untuk memproses dalam skrip:

SELECT 
     c.color as color,
     s.size,
     o.amount  --Edit: added 
 FROM `colors` c
 INNER JOIN `order` o
 INNER JOIN `sizes` s
     WHERE c.`id` = o.`color` and s.`id` = o.`size`

Lihat cara kerjanya @SQL fiddle .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengaturan mysql zona waktu codeigniter

  2. Masalah catatan aktif CodeIgniter yang memanggil beberapa prosedur tersimpan

  3. MySql - pelengkapan otomatis

  4. MYSQL pilih kueri daftar pengembalian bulan sebagai string dari antara tanggal mulai/akhir

  5. 2 Cara Mengonversi Angka ke Oktal di MySQL