mysql查询:将表更改为其他表
我的问题是:mysql查询:将表更改为其他表,mysql,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; 这就是结果: +-----------+-------
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|U日期| Fadpos | Fplay|U数量|
+-----------+--------+-----------+
|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,让结果转换为:
这意味着每天作为一行,不同的Fadpos作为不同的列,其值是当天Fadpos的Fplay_num
那么如何编写sql呢?试试下面的方法
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;
有关更多信息,请参阅我的答案
请注意,我无法测试这段代码,因为我需要创建一个示例表并用数据填充它。如果您有脚本,将这样做,然后请修改您的问题。如果做不到这一点,编辑问题以包含输出的文本副本而不是当前图像将很有帮助
祝你好运 查询的可能重复项失败,表结构查询为:创建表
tbl\u cnt\u display\u num\u by\u adpos
(Fimp\u date
int(11)DEFAULT NULL,Fprograme\u id
int(11)DEFAULT NULL,Fadpos
int(11)DEFAULT NULL,Fplay\num
int(11)DEFAULT NULL,etl\u stamp
varchar(200)默认为空,KEYFprograme\u id\u index
(Fprograme\u id
),KEYFimp\u date\u index
),KEYindex\u Fadpos
)引擎=InnoDB默认字符集=utf8为了澄清,Fprograme\u id、Fimp\u date和Fadpos是否构成复合主键,还是只有一个作为主键?没有主键,它们只是索引