试图使一列的值进入新表的行中

时间:2019-06-26 21:36:44

标签: mysql

我正在尝试创建一个新表,该表使用现有表中一行(整个列)中的值并将其转换为列。

我希望它像INSERT INTO … SELECT DISTINCT那样工作以填充列,但是要使结果成为表的新列。

现在我要创建行的列中的值是:

  

001-2018年6月
  002-2018年7月
  003-2018年8月
  …
  013-2019年6月

但是,我不能仅仅对其进行硬编码,因为我希望随着更多月份的添加(2019年7月等)来运行它们

我想要一个表中的列与行同名的表,因为我试图将每月的效果与其他变量进行比较,例如哪个用户每月驾驶的次数最多。

到目前为止,从这里以前的答案开始,我尝试创建一个可以执行以创建表的字符串。

select @s:=concat('create table students_col (',group_concat(driving_month,' CHAR(100)' order by driving_month),')') from new_drivers;
prepare statement from @s;
execute statement;
deallocate prepare statement;

但是,尽管MySQL Workbench没有红色下划线,但是除了选择连接的语句之外,我还为每个语句获取了错误代码。

  

错误代码:1064。您的SQL语法有错误;请在第1行的'2018年6月CHAR(100),2018年7月CHAR(100),2018年8月CHAR(100)'附近检查与MySQL服务器版本相对应的手册以使用正确的语法
  错误代码:1243。已将未知的预准备语句处理程序(语句)提供给EXECUTE
  错误代码:1243。赋予DEALLOCATE PREPARE的未知的准备好的语句处理程序(语句)

当我单独使用@s运行查询时,一切正常,并且不知道语法错误在哪里。

我愿意采取任何更好的方法。我只希望能够轻松地创建表格,其中月份会自动创建为行。不幸的是,为了使事情与其他信息保持一致,我不能只从字符串中提取月份和年份,所以我也需要001、002...。

1 个答案:

答案 0 :(得分:0)

由于driving_month包含空格,因此需要在其周围加上反引号以创建列名。

select @s:=concat('create table students_col (',group_concat('`', driving_month,'` CHAR(100)' order by driving_month),')') from new_drivers;