MySQL няма осивен елемент функция, така че ще трябва да транспонирате данните от редове в колони с помощта на агрегатна функция с CASE
израз:
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
Вижте SQL Fiddle с демонстрация .
Ако ще имате неизвестен брой types
които искате да конвертирате в колони, можете да използвате подготвен израз за генериране на динамичен SQL:
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;
Вижте SQL Fiddle с демонстрация