MS ACCESS交叉表DATA

时间:2015-01-15 15:45:23

标签: sql 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个月或更长的时间

所以新表看起来如下

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中编写这个查询?

1 个答案:

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