带连接的MYSQL数据透视表

时间:2015-07-04 00:54:54

标签: mysql join pivot-table

我有以下两个表,并希望得到数据透视表:

表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'应该显示

这里我的表格为图片:

enter image description here

1 个答案:

答案 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;