我现在有四张桌子。
对于类型,1 =迟到,2 =提前休假
是否可以使用一个sql语句生成这样的查询?
C3:E4是存储一个人在活动中所拥有的总时间的单元格。
或者如果不可能,我想将最终结果导出到Excel文件。 我怎么能在VBA中做到这一点? 非常感谢。如果我没有足够清楚地解释,请告诉我。
答案 0 :(得分:0)
数据透视表是您需要的,遗憾的是我无法找到从Access导出一个作为平面查询的方法。它只会将其导出为excel中的数据透视表。此查询将为您提供正确的数据。然后你必须从它创建一个支点
SELECT DISTINCT
StuInfo.StuName AS Name,
StuInfo.Stu_No,
DateDiff("h",IIf([AcctLateAriveAndEarlyLeave].[Type]=1,[AcctLateAriveAndEarlyLeave].[Time],[AcctInfo].[sTime]),IIf([AcctLateAriveAndEarlyLeave].[Type]=2,[AcctLateAriveAndEarlyLeave].[Time],[AcctInfo].[eTime])) AS AttendedFor, Format([AcctInfo].[sTime],"mm/dd/yyyy") AS OnDate
FROM ((StuInfo LEFT JOIN AcctAttendance ON StuInfo.Stu_No = AcctAttendance.Stu_No) LEFT JOIN AcctInfo ON AcctAttendance.[Act_S/N] = AcctInfo.[S/N]) LEFT JOIN AcctLateAriveAndEarlyLeave ON StuInfo.Stu_No = AcctLateAriveAndEarlyLeave.Stu_No;
然后,您可以创建一个类似于此
的数据透视表
显然,如果你想要明确的时间以外的东西,你必须稍微改变一下。
答案 1 :(得分:0)
交叉表查询可以正常工作。但是,我需要更多关于日期字段下的值计算的信息。在我的例子中,我假设它们是Max(Type)
TRANSFORM Max(Type) AS MaxOfType
SELECT StuInfo.SteName, StuInfo.Stu_No FROM StuInfo
INNER JOIN ActLateArriveAndEarlyLeave ON StuInfo.Stu_No = ActLateArriveAndEarlyLeave.Stu_No
GROUP BY StuInfo.Ste_No, StuInfo.SteName
PIVOT Format(ActLateArriveAndEarlyLeave.TimeValue, 'short date');