表一:shop_info:商家特征数据CREATE TABLE `shop_info` (
  `shop_id` varchar(255) default NULL,
  `city_name` varchar(255) default NULL,
  `location_id` varchar(255) default NULL,
  `per_pay` varchar(255) default NULL,
  `score` varchar(255) default NULL,
  `comment_cnt` varchar(255) default NULL,
  `shop_level` varchar(255) default NULL,
  `cate_1_name` varchar(255) default NULL,
  `cate_2_name` varchar(255) default NULL,
  `cate_3_name` varchar(255) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;表二:user_pay_count:商家每天客户流量数据CREATE TABLE `user_pay_count` (
  `shop_id` varchar(255) default NULL,
  `time_stamp` varchar(255) default NULL,
  `count` varchar(255) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
现在两张表我想合成一张表--表三:商家特征数据和每天人流量数据CREATE TABLE `shop_info` (
  `shop_id` varchar(255) default NULL,
  `city_name` varchar(255) default NULL,
  `location_id` varchar(255) default NULL,
  `per_pay` varchar(255) default NULL,
  `score` varchar(255) default NULL,
  `comment_cnt` varchar(255) default NULL,
  `shop_level` varchar(255) default NULL,
  `cate_1_name` varchar(255) default NULL,
  `cate_2_name` varchar(255) default NULL,
  `cate_3_name` varchar(255) default NULL,
  `2015-06-26`  varchar(255) NULL ,
  `2015-06-27`  varchar(255) NULL ,
   ..........
  `2016-10-31`  varchar(255) NULL 
) ENGINE=MyISAM DEFAULT CHARSET=utf8;由于表二的具体数据时间范围是2015-06-26 06:00:00至2016-10-31 23:00:00但是有的商家的数据只是从 2016-07-01 开始,或者其他时间开始。现在我想把两张表整合到一起,用上面的创建表,合理吗?什么SQL语句可以把两张表按照上面的方式创建一张新表呢?

解决方案 »

  1.   

    表一:shop_info:商家特征数据CREATE TABLE `shop_info` (
      `shop_id` varchar(255) default NULL,
      `city_name` varchar(255) default NULL,
      `location_id` varchar(255) default NULL,
      `per_pay` varchar(255) default NULL,
      `score` varchar(255) default NULL,
      `comment_cnt` varchar(255) default NULL,
      `shop_level` varchar(255) default NULL,
      `cate_1_name` varchar(255) default NULL,
      `cate_2_name` varchar(255) default NULL,
      `cate_3_name` varchar(255) default NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;表二:user_pay_count:商家每天客户流量数据 部分截图CREATE TABLE `user_pay_count` (
      `shop_id` varchar(255) default NULL,
      `time_stamp` varchar(255) default NULL,
      `count` varchar(255) default NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;表三:商家特征数据和每天人流量数据CREATE TABLE `shop_info` (
      `shop_id` varchar(255) default NULL,
      `city_name` varchar(255) default NULL,
      `location_id` varchar(255) default NULL,
      `per_pay` varchar(255) default NULL,
      `score` varchar(255) default NULL,
      `comment_cnt` varchar(255) default NULL,
      `shop_level` varchar(255) default NULL,
      `cate_1_name` varchar(255) default NULL,
      `cate_2_name` varchar(255) default NULL,
      `cate_3_name` varchar(255) default NULL,
      `2015-06-26`  varchar(255) NULL ,
      `2015-06-27`  varchar(255) NULL ,
       ..........
      `2016-10-31`  varchar(255) NULL 
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
      

  2.   

    SELECT
    shop_info.shop_id,
    user_pay_count.shop_id,
    shop_info.city_name,
    shop_info.location_id,
    shop_info.per_pay,
    shop_info.score,
    shop_info.comment_cnt,
    shop_info.shop_level,
    shop_info.cate_1_name,
    shop_info.cate_2_name,
    shop_info.cate_3_name,
    user_pay_count.time_stamp,
    user_pay_count.count
    FROM
    shop_info ,
    user_pay_count
    WHERE shop_info.shop_id=user_pay_count.shop_id现在这个结果不是我想要的,我想要把时间这列 转换成列名
    每行数据为1个商家,从2015-06-26 至2016-10-31每天的客户流量
    一共2000个商家,2000行这样的表结构转变下了思路,保持表shop_info结构不变,然后把表shop_info表里的10列数据直接插入到表user_pay_count里,变成下图:
    所以现在想把表user_pay_count里的时间列里的每天时间点  变成  列名
      

  3.   

    1、本人非常不赞同这种写法,如果只有几行统计性质的数据,可以这么玩。但是实际业务中,每增加一天多一列数据,这导出的excel该有多难看呀,以后统计数据还挺麻烦。
    2、如果非要这样写,可以去看看动态sql。(真心没有那个必要整的这么复杂)