2014-05-22 47 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');