【问题标题】:How do I add a column with an auto-incremental name to a MySql table?如何将具有自动增量名称的列添加到 MySql 表?
【发布时间】:2011-09-08 14:23:42
【问题描述】:

我正在使用 VB.net 编写一个 MYSQL 应用程序,我需要添加的一个功能是能够为我的员工每周工作添加一列。例如,我希望将第一列称为“W1”,将下一列称为“W2”,依此类推,直到“W52”。所以我的问题是如何在我的表中添加一列并将其名称添加到其当前值?如果名称中没有任何字母,这很容易,但我需要它在标题中也有“W”以避免混淆。添加我有这个的列:

ALTER TABLE manager ADD W1 MEDIUMINT;

如果可能的话,我只需要将 INTEGER 添加到 VARCHAR 数据类型的部分......也许应该涉及某种数据类型转换?

更新: 我想在我的 vb.net 表单中显示的是一个看起来像这样的数据网格视图:

为了进一步解释,最顶部的黑条是每周的日期戳,如果可能的话,我希望将其包含在 datagridview 中,但这不是必需的。在每周一栏下,员工将输入他们工作的百分比(例如:20%,或者 0.20 是一天的工作)我知道这是一种奇怪的做事方式,但它是强制性的……我想知道是不是可以自动创建这些列,而不是我必须手动输入它们。

【问题讨论】:

  • 一般来说,当你遇到这样的情况时,你的数据库设计就很困难了。考虑在几周内单独使用一张桌子。
  • 我没有回答你的问题,但我认为你最好创建一个新表 (userid INT, week SMALLINT, data_you_need) 并在其中为每个用户/周添加数据,而不是在原始表的列中添加数据!!!
  • 创建新表如何解决问题?我只是尝试使用非查询语句添加列,而不必自己添加 52 列。对不起,我应该更清楚。我想要的是某种递归检查并添加语句以查看“W1”是否存在,如果不存在,则添加它,如果存在则转到下一条语句。
  • @daniel:为什么每周都需要一个专栏?我会简单地创建一个表WorkingTimefiEmployee 作为FK 和startTimeendTime(datetime) 作为字段。其余的是SQL(例如从日期时间获取星期数)。
  • 数据库不是电子表格。请务必阅读规范化。

标签: mysql sql vb.net type-conversion


【解决方案1】:

一种可能的解决方案是创建 2 个新表

tbl_week: weekid, weekno, start_date, end_date

tbl_weeks_worked: userid, weekid, 工作

并透视数据库中的数据。 (或者你可以在 VB.NET 中做到这一点)

如果你想要标题,你需要联合 2 个旋转查询

例如:

SELECT '' as userid,
      MAX(CASE WHEN w.weekno = 1 THEN w.start_date END)) AS 'W1', 
      MAX(CASE WHEN w.weekno = 2 THEN w.start_date END)) AS 'W2', 
      MAX(CASE WHEN w.weekno = 3 THEN w.start_date END)) AS 'W3', 
      ........ etc 
FROM tbl_week w
WHERE w.start_date >= start AND w.end_date <= enddate 

UNION ALL

SELECT  
  userid,  
  SUM(CASE WHEN w.weekno = 1 AND ww.weekid IS NOT NULL THEN worked ELSE 0 END)) AS 'W1', 
  SUM(CASE WHEN w.weekno = 2 AND ww.weekid IS NOT NULL THEN worked ELSE 0 END)) AS 'W2', 
  SUM(CASE WHEN w.weekno = 3 AND ww.weekid IS NOT NULL THEN worked ELSE 0 END)) AS 'W3', 
  ........ etc 
FROM tbl_week w
LEFT JOIN tbl_weeks_worked ww ON ww.weekid = w.weekid
WHERE w.start_date >= start AND w.end_date <= enddate 
GROUP BY userid; 

注意:(这仅适用于单年视图)

【讨论】:

  • 好的,你只需要添加一列来保存一天的工作部分,已经编辑了答案
  • 告诉我它们是什么,我可以帮助你
  • 它没有具体说明,它只是说“您的一个或多个语句中存在 SQL 语法错误,请参阅您的 MySql 用户手册了解更多信息”
猜你喜欢
  • 2021-03-21
  • 2016-05-29
  • 1970-01-01
  • 2019-01-18
  • 2014-06-18
  • 2021-08-08
  • 2015-06-05
  • 1970-01-01
相关资源
最近更新 更多