Không có lệnh PIVOT (MySQL bảng tổng hợp (chuyển đổi hàng thành cột) ) trong MySQL để truy vấn của bạn sẽ là tĩnh đối với kích thước. Đó là lý do tại sao tốt hơn là nên hoãn việc này trong đơn đăng ký.
Nghĩ rằng nếu bạn chỉ có tên miền hữu hạn và nhỏ cho cột kích thước thì bạn có thể sử dụng Truy vấn sau mà tôi đã đăng bên dưới:
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)
Như bạn có thể thấy trong điều kiện IF, tôi sử dụng giá trị của kích thước, đó là ý tôi muốn câu hỏi là tĩnh. Tôi giả định rằng tất cả các kích thước có thể có có thể là 32, 34, 36, 38.
Bản demo làm việc @ SQL Fiddle
Chỉnh sửa:Như tôi đang nói từ đầu Nếu giá trị kích thước không được xác định hoặc tên miền lớn thì tốt hơn là bạn nên hoãn công việc xoay trục trong tập lệnh máy chủ của mình (ví dụ:PHP), bạn vẫn có thể sử dụng truy vấn sau để xử lý trong tập lệnh:
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`
Xem cách nó hoạt động @ SQL fiddle .