2014-05-22 46 views
0

我现在有四个表。访问Sql关于pivot

  1. StuInfo
  2. ActInfo
  3. ActAttendance
  4. ActLateArriveAndEarlyLeave

对于类型,1 =迟到,2 =早退

是否possi可以通过一个sql语句生成这样的查询吗?

C3:E4是存储的总时间的人在活动invloved细胞。

或者如果不可能,我想将最终结果导出到Excel文件。 我该如何在VBA中做到这一点?
非常感谢。如果我没有足够清楚地解释,请让我知道。

+0

对不起,我不能直接上传照片。 – pk028382

回答

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; 

创建一个支点,那么你可以创建一个数据透视表,如果你想比显性小时以外的东西,看起来像这样

enter image description here

很明显,你必须改变查询一下。

0

交叉表查询可以工作。但是,我需要一些关于日期字段下的值计算的更多信息。在我的例子中,我假设他们是最大(类型)

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');