Как добавить столбец с автоинкрементным именем в таблицу MySql? - PullRequest
1 голос
/ 08 сентября 2011

Я использую VB.net для написания MYSQL-приложения, и мне нужно добавить одну функцию - возможность добавлять столбцы для каждой недели, в течение которой работали мои сотрудники. Например, я хочу, чтобы первый столбец назывался «W1», а следующий - «W2» и т. Д. Вплоть до «W52». поэтому мой вопрос заключается в том, как мне добавить столбец к моей таблице и добавить его имя к его текущему значению? если бы в имени не было букв, это было бы легко, но мне нужно, чтобы в названии также была буква «W», чтобы избежать путаницы. чтобы добавить столбец у меня есть это:

ALTER TABLE manager ADD W1 MEDIUMINT;

Мне просто нужна часть, которая добавляет INTEGER к типу данных VARCHAR, если это возможно ... Может быть, должно быть какое-то преобразование типов данных?

UPDATE: то, что я хочу отобразить в моей форме на vb.net, это представление таблицы данных, которое выглядит в точности так:

Sample from my spread sheet

Просто чтобы пояснить далее, черная полоса в самом верху - это отметки даты для каждой недели, я хотел бы включить это в таблицу данных, если это возможно, но это не обязательно. В каждом столбце недели сотрудники будут вводить проценты, которые они проработали (например, 20% или 0,20 - это один день работы). Я знаю, что это странный способ ведения дел, но он обязателен ... и мне было интересно, если это так Можно автоматизировать создание этих столбцов, а не вводить их вручную.

1 Ответ

1 голос
/ 08 сентября 2011

1 возможным решением было бы создать 2 новые таблицы

tbl_week: weekid, weekno, start_date, end_date

tbl_weeks_worked: идентификатор пользователя, 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; 

Примечание:(это будет работать только для одного года просмотра)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...