2015-10-21 89 views
0

我的查询:MySQL查询:更改表到另一个表现

select Fimp_date, Fadpos, sum(Fplay_num) as Fplay_num from tbl_cnt_display_num_by_adpos where Fimp_date between date_format(now(),'%Y%m%d')-interval 2 day and date_format(now(),'%Y%m%d') group by Fadpos, Fimp_date; 

,这是结果: + ----------- + -------- + ----------- +

| Fimp_date | Fadpos | Fplay_num |

+ ----------- + -------- + ----------- +

| 20151020 | 0 | 1562156 |

| 20151020 | 1 | 19354 |

| 20151020 | 101 | 352796 |

| 20151020 | 102 | 232052 |

| 20151020 | 103 | 42324 |

| 20151020 | 104 | 214 |

| 20151020 | 105 | 167904 |

| 20151020 | 500 | 49 |

+ ----------- + -------- + ----------- +

如何编写SQL让结果转换为: enter image description here

这意味着每天作为一个行,不同的Fadpos作为不同的列,值是当天Fadpos的Fplay_num。

那么如何编写sql?

+0

可能重复[mysql pivot/crosstab query](http://stackoverflow.com/questions/12382771/mysql-pivot-crosstab-query) –

回答

0

请尝试以下...

SET @sql = NULL; 

SELECT GROUP_CONCAT(DISTINCT CONCAT(
     'MAX(CASE WHEN `Fadpos` = ''', 
     `Fadpos`, 
     ''' THEN Fplay_num END) AS `', 
     `Fadpos`, '`' 
    ) 
) INTO @sql 
FROM (SELECT Fadpos, 
      SUM(Fplay_num) AS Fplay_num 
     FROM tbl_cnt_display_num_by_adpos 
     WHERE Fimp_date BETWEEN DATE_FORMAT(NOW(), '%Y%m%d') - INTERVAL 2 DAY 
          AND DATE_FORMAT(NOW(), '%Y%m%d') 
     GROUP BY Fadpos, 
       Fimp_date) AS AliasForSelect; 

SET @sql = CONCAT('SELECT Fimp_date, 
          ', 
          @sql, 
          ' 
        FROM tbl_cnt_display_num_by_adpos 
        GROUP BY Fimp_date;'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

请参阅我的答案在How to match column names and values from joining and related tables?以获取更多信息。

请注意,我一直无法测试此代码,因为我需要创建一个示例表并使用数据填充它。如果你有脚本,那么请修改你的问题。如果不这样做,编辑你的问题以包含输出的文本副本而不是当前图像将会很有帮助。

祝你好运!

+0

查询失败,表结构查询是:CREATE TABLE'tbl_cnt_display_num_by_adpos' ( 'Fimp_date' INT(11)DEFAULT NULL, 'Fprograme_id' INT(11)DEFAULT NULL, 'Fadpos' INT(11)DEFAULT NULL, 'Fplay_num' INT(11)DEFAULT NULL, 'etl_stamp' VARCHAR (200)DEFAULT NULL, KEY'Fprograme_id_index'('Fprograme_id') KEY'Fimp_date_index'('Fimp_date') KEY'index_Fadpos'('Fadpos') )ENGINE = InnoDB的默认字符集= UTF8 –

+0

为了澄清,做Fprograme_id, Fimp_date和Fadpos是组合主键,还是只有一个作为主键? – toonice

+0

没有主键,它们只是索引 –

相关问题