我有2个包含以下字段的表:
表1:
Date, Month, Dayname
2013-01-01, January, Tuesday
这是从2013-01-01到2013-12-31
表_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 :(得分:0)
这里有一些事情,但它是学习曲线的全部内容!首先,MS SQL中有一些函数可以提供Month和Dayname,查找DateName和DatePart,所以如果你已经存在,这些应该是DateTime或smallDate列上的计算列。其次,Table_2是一个不理想的设计,一般来说,表格应该窄,索引宽。所以Table2应该是WorkersID,Date,Hours的形式,并且可能有覆盖索引,或者最坏的是Date,EmployeeID上的复合聚簇索引。然后(相对)容易在您的数据上生成良好的查询。
如果你维护你的结构,我也会说一个支点对你没有帮助,我想如果你维护你的结构,你想要一个针对date和employeeId的联盟。 MS SQL现在还包含在一个范围内生成一系列值的功能(连续的日期范围)http://www.sqlperformance.com/2013/01/t-sql-queries/generate-a-set-1
答案 1 :(得分: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