使用Access 2016创建一个跟踪团队可用性的应用。看起来像:
+---------------------------------------------------------------+
| << < 1/1/2018 > >> |
| | 1/1/2018 | 1/2/2018 | 1/3/2018 | 1/4/2018 | 1/5/2018 |
+---------------------------------------------------------------+
|Jake |Available |Unavail |Available |Unavail |Available |
|John |Unavail |Available |Available |Available |Unavail |
+---------------------------------------------------------------+
为了能够这样做,我使用了一个交叉表查询,可以在下面找到:
PARAMETERS DayTemp DateTime;
TRANSFORM First(Schedule.Availability) AS Availability
SELECT Schedule.UserID
FROM Schedule
WHERE (((Schedule.Day)>=[DayTemp] And (Schedule.Day)<=(DateAdd("d",7,[DayTemp]))))
GROUP BY Schedule.UserID
PIVOT Format([Day],"Short Date");
这导致查询看起来像:
+---------------------------------------------+
|UserID |1/1/2018 | 1/2/2018 | .... | 1/5/2018|
+---------------------------------------------+
|1 |Available|..........|......|Unavail |
|2 |Unavail |..........|......|Available|
+---------------------------------------------+
我遇到的问题是列标题总是根据日期而变化(例如1/1/2018 vs 1/8/2018 vs 1/15/2018),这使得它无法绑定控制到。我该如何解决这个问题?也许更好的数据库设置?
答案 0 :(得分:1)
由于您显示的是与DayTemp
相关的日期,因此您也可以相对于它来表达您的列名称:
PIVOT DATEDIFF('d', [DayTemp], [Day]);
哪会导致:
+---------------------------------------------+
|UserID |0 | 1 | .... | 4 |
+---------------------------------------------+
|1 |Available|..........|......|Unavail |
|2 |Unavail |..........|......|Available|
+---------------------------------------------+