MySQL không có pivot vì vậy bạn sẽ phải chuyển dữ liệu từ các hàng thành cột bằng cách sử dụng một hàm tổng hợp với CASE
biểu thức:
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
Xem SQL Fiddle with Demo .
Nếu bạn sắp có một số types
không xác định mà bạn muốn chuyển đổi thành cột, bạn có thể sử dụng một câu lệnh đã chuẩn bị để tạo SQL động:
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;