我有两张表,其中一张员工详细信息如下
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个月或更长的时间
所以新表看起来如下
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加入这两个表 我知道我们可以根据开始日期确定员工的第一个月 但是你如何在SQL中编写这个查询?
答案 0 :(得分: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