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)默认为空,KEY
Fprograme\u id\u index
Fprograme\u id
),KEY
Fimp\u date\u index
),KEY
index\u Fadpos
)引擎=InnoDB默认字符集=utf8为了澄清,Fprograme\u id、Fimp\u date和Fadpos是否构成复合主键,还是只有一个作为主键?没有主键,它们只是索引