我有以下两个表,并希望得到数据透视表:
表1(名称:search_keywords): id | product_id |关键字|活性
表2(名称:keyword_ranking): id | search_keyword_id | eval_date |秩
search_keywords.id是表2中的外键:keyword_ranking.search_keyword_id
结果我需要下表:
eval_date | keyword1 |关键字2 |关键字3 ...
01.01.2015 | 2 | 4 | 12 ...... --->排名(每个关键字)
02.01.2015 | 1 | 6 | 10 ...... --->排名(每个关键字)
03.01.2015 | 3 | 5 | 9 ...... --->排名(每个关键字)
值得注意的是,我不知道表1中有多少关键字,因此列必须是动态的。
只有product_id =?的数据?和积极的=' Y'应该显示
这里我的表格为图片:
答案 0 :(得分:0)
好的,我想我找到了一个准备好的陈述的解决方案如下:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(sk.keywords = ''', sk.keywords,''', kr.rank, NULL)) AS ', CONCAT('`',sk.keywords, '`')
)
) INTO @sql
FROM
search_keywords sk;
SET @sql = CONCAT('SELECT eval_date, ', @sql, '
FROM keyword_ranking AS kr
LEFT JOIN search_keywords AS sk
ON kr.search_keywords_id = sk.id
GROUP BY eval_date');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;