2013-05-29 118 views
0

信息,我有2代表具有以下字段:填寫一個表與另一個

TABLE_1:

Date,  Month, Dayname 
2013-01-01, January, Tuesday 

這正好從2013-01-01到2013-12-31

TABLE_2:

Workers_ID, Monday, Monday_Hours, Tuesday, Tuesday_Hours and so forth 
1,   TRUE,  8,   TRUE,   8  ... 
2,   False,  0,   FALSE,  4 

我需要的是一個表:

Date, Month, Dayname, Hours_to_work, Workers_ID 

此表有Number of workers x Days a year行,並且在每行中您可以看到特定工作人員工作多少個小時。

我的問題,我不知道如何做到這一點。如果有人能幫助我,這將是非常有益的。

+0

看看能否「逆透視」對錶2函數的SQL實例,以獲得列{星期一,週二,週三...}和{Monday_Hours,Tuesday_Hours,...}成行。這應該足以讓你開始,我們可以幫助你陷入困境。 – actkatiemacias

回答

0

Ian P在修改模式時給出了很好的建議。

如果你絕對與當前設計卡住了,這裏有一個策略,你可以使用:

SELECT Date, Month, Dayname, Workers_ID, 
    CASE Dayname 
    WHEN 'Monday' THEN Monday_Hours 
    WHEN 'Tuesday' Then Tuesday_Hours 
    -- etc... 
    END AS Hours_to_work 
FROM Table_1 CROSS JOIN Table_2 
0

這裏有一些東西,但它的學習曲線的所有部分!首先,MS SQL中有函數提供月份日期名稱,查找DateName和DatePart,所以如果您已經擁有這些函數,這些函數應該是DateTime或smallDate列中的計算列。其次,Table_2並不是一個理想的設計,一般來說,表格應該很窄,索引很寬。所以Table2的格式應該是WorkersID,Date,Hours,並且可能有一個覆蓋索引,或者最好是Date,EmployeeID上的複合聚集索引。然後(相對)很容易在數據上生成良好的執行查詢。

如果你保持你的結構,我也會說一個關鍵不會幫助你,我想你想要一個工會對日期和employeeId,如果你維護你的結構。 MS SQL現在還包含在一定範圍內生成一系列值的功能(連續的日期範圍)http://www.sqlperformance.com/2013/01/t-sql-queries/generate-a-set-1

+0

我是這樣做的,因爲伊恩說,重建我的表,它的工作原理。仍然非常瞭解'不透明'的功能,並完全理解現在的交叉連接。謝謝大家! – ruedi