0

我有 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 workersxDays a year行,在每一行中,您可以看到特定工人的工作小时数。

我的问题,我不知道如何做到这一点。如果有人可以帮助我,那就太好了。

4

2 回答 2

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
于 2013-05-29T16:52:25.697 回答
0

好吧,这里有一些东西,但它都是学习曲线的一部分!首先,MS SQL 中有一些函数可以提供 Month 和 Dayname,查找 DateName 和 DatePart,因此如果您还没有,这些应该是 DateTime 或 smallDate 列上的计算列。其次,Table_2 不是一个理想的设计,一般来说,表应该是窄的,索引应该是宽的。所以 Table2 应该是 WorkersID、Date、Hours 的形式,并且很可能有一个覆盖索引,或者在最坏的情况下是一个关于 Date、EmployeeID 的复合聚集索引。然后(相对)容易对您的数据生成性能良好的查询。

如果你保持你的结构,我也会说一个支点对你没有帮助,我认为如果你保持你的结构,你想要一个反对日期和雇员 ID 的工会。MS SQL 现在还包含在一个范围内(连续的日期范围)产生一系列值的功能 http://www.sqlperformance.com/2013/01/t-sql-queries/generate-a-set-1

于 2013-05-29T16:41:32.277 回答