2011-09-08 102 views
1

我正在使用VB.net編寫MYSQL應用程序,我需要添加的一個功能是能夠爲我的員工每週添加一列。例如,我希望第一列被稱爲「W1」,下一個列爲「W2」等,直到「W52」。所以我的問題是如何將一列添加到我的表,並且它的名稱加1到它的當前值?如果名稱中沒有任何字母,則很容易,但我需要它在標題中包含「W」以避免混淆。加我有這個列:如何將具有自動增量名稱的列添加到MySql表中?

ALTER TABLE manager ADD W1 MEDIUMINT; 

我只需要,增加了一個整數一個VARCHAR數據類型如果可能的話......也許應該有某種數據類型轉換所涉及的部分?

UPDATE: 我想在我的vb.net表單中顯示的是一個DataGrid認爲長相酷似這樣的:

Sample from my spread sheet

只是爲了在非常進一步解釋,黑條頂部是每週的日期戳,我希望這可以包括在datagridview,如果可能的話,但它不是必需的。在每週的專欄中,員工將輸入他們工作的百分比(例如:20%或0.20是一天的工作)我知道這是一種奇怪的做事方式,但這是強制性的......我想知道它是否是可以自動創建這些列,而不必手動輸入它們。

+5

一般來說,當你有這樣的情況時,你的數據庫設計就離職了。考慮幾個星期有一個單獨的表。 – rickythefox

+6

我沒有回答你的問題,但我認爲你最好創建一個新表('userid INT,星期SMALLINT,data_you_need)',併爲每個用戶/周添加數據,而不是在原始表的列上! – Marco

+0

如何創建一個新表解決任何問題?即時通訊只是試圖添加列使用非查詢語句,而不必自己添加52列。對不起,我應該更清楚。我想要的是某種遞歸檢查並添加語句以查看「W1」是否存在,如果不存在,則添加它,如果它確實存在,則轉到下一個語句。 – daniel11

回答

1

1可能的解決方案是創建2個新表

tbl_week: weekid,weekno,日期,結束日期

tbl_weeks_worked: 用戶ID,weekid,工作

和樞轉中的數據數據庫。 (alternativly你可以在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; 

注:(這將僅適用於工作一年的觀點)

+0

閱讀我的更新... – daniel11

+0

好的,你只需要添加一列,以容納一天工作的部分,已編輯答案 –

+0

上述聲明沒有工作,它說有幾個錯誤... – daniel11

相關問題