在一个表中填写另一个表的信息

时间:2013-05-29 15:55:44

标签: sql-server tsql

我有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行,您可以在每行中查看特定工作人员的工作时数。

我的问题,我不知道如何实现这一目标。如果有人可以帮助我,那将会很有吸引力。

2 个答案:

答案 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