【发布时间】:2015-05-05 13:44:17
【问题描述】:
使用找到的说明here 我尝试创建一个交叉表查询来显示前三年的历史数据,我想将其输出到报告中。
我遇到了一些复杂情况,这让我很难做到这一点,而且我无法正确显示数据。
它所基于的查询结构如下:
EmpID | ReviewYearID | YearName | ReviewDate | SelfRating | ManagerRating | NotSelfRating |
1 | 5 | 2013 | 01/09/2013 | 3.5 | 3.5 | 3.5 |
1 | 6 | 2014 | 01/09/2014 | 2.5 | 2.5 | 2.5 |
1 | 7 | 2015 | 01/09/2015 | 4.5 | 4.5 | 4.5 |
2 | 6 | 2014 | 01/09/2014 | 2.0 | 2.0 | 2.0 |
2 | 7 | 2015 | 01/09/2015 | 2.0 | 2.0 | 2.0 |
3 | 7 | 2015 | 01/09/2015 | 5.0 | 5.0 | 5.0 |
[编辑]:这是基本查询的 SQL。它正在合并来自两个表的数据:
SELECT tblEmployeeYear.EmployeeID AS EmpID, tblReviewYear.ID AS ReviewYearID, tblReviewYear.YearName, tblReviewYear.ReviewDate, tblEmployeeYear.SelfRating, tblEmployeeYear.ManagerRating, tblEmployeeYear.NotSelfRating
FROM tblReviewYear INNER JOIN tblEmployeeYear ON tblReviewYear.ID = tblEmployeeYear.ReviewYearID;
[/编辑]
我想要一个交叉表查询,它可以转换列/行以显示特定员工最多 3 年的历史数据(基于审查日期)。员工 ID 1 的最终结果如下所示:
Year | 2015 | 2014 | 2013 |
SelfRating | 4.5 | 2.5 | 3.5 |
ManagerRating | 4.5 | 2.5 | 3.5 |
NotSelfRating | 4.5 | 2.5 | 3.5 |
其他员工的列会更少,因为他们没有前几年的数据。
我在将其过滤到特定员工并按审核日期对年份进行排序时遇到问题(名称并不总是一种可靠的排序方式)。
最后我希望将其用作报告的数据。
如果有与交叉表查询不同的方法来完成此操作,我也可以。
谢谢!
【问题讨论】:
-
你很想看看 sql PIVOT 语句technet.microsoft.com/en-us/library/… 恐怕我帮不了你更多,因为我自己从来没有真正使用过它,但是我 99% 确定这可以满足您的需求
-
您是否考虑过将初始查询链接到 Excel 工作表,然后在 Excel 中创建数据透视表?这是我从您的初始查询drive.google.com/file/d/0B-J5B7nFljZiMUYzZzAtTE5PeHc/… 在 Excel 中创建的内容,这可以链接到您的 Access 查询,因此如果有新数据,您可以在 Excel 中刷新它。如果这是您所追求的,但不知道该怎么做,请告诉我,我会发布详细的答案。
-
@MattHall - 当表单加载时,该过程可以自动发生吗?基本上,我希望用户能够选择一名员工并将该数据作为他们需要在表单上执行的其他操作的参考。我正计划将报告嵌入到表单中。
标签: sql ms-access vba ms-access-2013