У меня есть следующие таблицы
demographic_categories
demographic_id demographic_name
1 color
2 age_group
project_tests
test_id group_id project_id
1 1 1
2 1 1
test_demographic_requirements
test_id project_id demgraphic_id demographic_value
1 1 1 blue
1 1 2 young
2 1 1 green
2 1 2 middle
И мне нужен запрос, который бы дал мне следующий результат:
test_id group_id color age_group
1 1 blue young
2 1 green middle
Я думаю, нам нужно использовать концепцию сводной таблицы, чтобы получить результат, но яневозможно.И я, демографические категории, можем ли мы быть такими же, как они имеют тенденцию меняться, поэтому мне нужно что-то динамическое, так, что было бы лучшим способом сделать это?
Я пытался сделать следующее, основываясь на предыдущих похожих вопросах, но это не такКажется, это работает для меня, вот что я попробовал:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'max(case when dc.demographic_name = ''',
demographic_name,
''' then trd.demographic_value end) AS ',
replace(demographic_name, ' ', '')
)
) INTO @sql
from demographic_categories;
SET @sql = CONCAT('SELECT pt.test_id, pt.group_id,
', @sql,'
from test_requirement_demographic trd
LEFT JOIN demographic_categories dc ON trd.demographic_id = dc.demographic_id
LEFT JOIN project_tests pt ON pt.test_id = trd.test_id and project_id =1
group by pt.test_id;');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;