2015-01-15 108 views
3

我有两个表,一个与员工的细节是这样的MS ACCESS交叉表数据

Employee ID | Employee Name | Start Date | Termination Date | 

2234  | John Smith | 2014-01-03 |     | 

3333  | Jane Doe  | 2014-04-22 | 2014-10-31  | 

1234  | Bobby Wilson | 2013-12-10 |     | 

我的第二个表按月年

看起来像这样

Employee ID | 2013-12 | 2014-01 | 2014-02 | 2014-03 | 2014-04 | etc | etc 

2234  |   | 199.99 | 130.00 | 300.00 | 230.99 | etc | etc 

3333  |   |    |   |   | 204.02 | etc | etc 

1234  | 455.99 | 332.32 | 334.00 | 553.00 | 334.99 | etc | etc 
有有销售

所以我需要的是做一个新的查询,帮助我显示员工的第一个月雇员销售数字的样子,第二个月的销售额,第三个销售额等等的趋势,根据当月当员工开始时。超过12个月或一个spand更

因此,新表将如下所示

Employee | Month 1 | Month 2 | Month 3 | Month 4 | etc | etc | 

2234  | 199.99 | 130.00 | 300.00 | 230.99 | etc | etc | 

3333  | 240.02 | (month 2) | (month 3)| (month 4)| etc | etc |  

1234  | 455.99 | 332.32 | 334.00 | 553.00 | etc | etc | 

所以我知道我们可以通过员工ID 连接两个表,我知道我们可以判断一个员工的每月1根据他们的开始日期 ,但你如何在SQL中写出这个查询呢?

+0

这是糟糕的桌子设计让你陷入困境的地方。我可以在理论上看到VBA中的哪些部分可以从开始日期中删除一天,然后使用年 - 月作为指针,但是我认为您不能用直接的SQL来完成此操作。由于每个人的年 - 月都不同,因此无法将一张桌子连接到另一张桌子,并以您希望的方式显示数据。 – 2015-01-15 15:56:35

+0

这个问题不同于它:http://stackoverflow.com/questions/27951872/ms-access-database-broken-into-month? – 2015-01-15 16:03:55

+0

好吧,你可以在SQL中使用FORMAT去除一天,然后我们将它划分成不难的月份。但是,如何检查每个员工每个月的月份是否与他们的开始日期相对应,对我来说是forigen – 2015-01-15 16:05:27

回答

2

正如我在这个问题发表评论时提及,你需要改变你的第二个表的设计如下(伪代码):

CREATE TABLE Sales(
    SaleId Autonumber PK 
    [Employee ID] FK (reference to Employees table) 
    SalesDate DateTime 
    Sales Decimal/Double 
); 

然后你就可以保存你的数据这方法:

SaleID EmpId SalesDate Sales 
1  2234 2014-01-01 199,99 
2  1234 2013-12-01 455.99 
3  1234 2014-01-01 332.32 
4  2234 2014-02-01 130 
5  1234 2014-02-01 334 
6  2234 2014-03-01 300 
7  1234 2014-03-01 553 
8  2234 2014-04-01 230.99 
9  3333 2014-04-01 204.02 
10  1234 2014-04-01 334.99 

最后,数据透视表可能看起来像:

TRANSFORM Sum(S.Sales) AS SumOfSales 
SELECT E.[Employee Id], E.[Employee Name] 
FROM Employees AS E INNER JOIN SalesByMY AS S 
    ON E.[Employee Id] = S.[Employee Id] 
GROUP BY E.[Employee Id], E.[Employee Name] 
PIVOT 'Month-' & DateDiff('m',[E].[StartDate],[S].[SalesDate])+1; 

结果:

EmpId EmpName  Month-1 Month-2 Month-3 Month-4 Month-5 
1234 Bobby Wilson 455.99 332.32 334  553  334.99 
2234 John Smith  199.99 130  300  230.99 
3333 Jane Doe  204.02 
+1

已点击赞成枢纽公式。也认为架构不好 – 2015-01-15 18:21:02

+0

哇这工作!除了我每月得到两倍? – 2015-01-15 19:04:15

+0

你需要找出它发生的原因。我在真实数据上测试了这个解决方案,就像我在例子中看到的一样。 – 2015-01-15 19:25:19