2016-02-19 187 views
-1

我在MS訪問中有一個自動化的報告,並且此查詢爲每個人從所有記錄中選擇最低小時,最高小時,平均小時和總小時數給定的日期範圍。MS Access MAX和MIN函數沒有返回正確的結果

SELECT tbl.Consultant, round(avg(tbl.HoursSpent),0) as Average, Min(tbl.HoursSpent) as Lowest, Max(tbl.HoursSpent) as Highest, Sum(tbl.HoursSpent) as Total 
FROM tbl 
WHERE 
(tbl.Canceled = false) 
AND (
(tbl.DateIn >= [Forms]![Reports]![ReportStartDate]) 
AND 
(tbl.DateIn <= [Forms]![Reports]![ReportEndDate]) 
) 
GROUP BY tbl.Consultant 

而不是得到預期的結果:MIN在任何記錄中產生最少的小時數,MAX產生最高的小時數;在某些情況下,查詢會生成高於MAX的MIN。

例子: Incorrect Query Result

回答

0

當然,我張貼在打完,我想辦法更改查詢。

對於誰遇到這樣的問題將來MS Access用戶:

MAX和MIN功能不會自動值轉換爲整數! 使用瓦爾()確保每個值轉換成整數:

MAX(Val(NumberValue))MIN(Val(NumberValue))

這是不是與SUM()和AVG()函數的一個問題,因爲他們只能處理整數,並自動進行轉換。 MIN()和MAX()可用於日期和其他字段類型,因此需要顯式轉換。

enter image description here

+0

出於好奇,什麼是'tbl.HoursSpent'的數據類型? – Andre

+0

文字,當然!在查詢其他人設置的數據庫時,需要學會檢查這些事情。 – pblo

+0

哎。 :)現在你寫了它,數據表中的左對齊將它排除。 – Andre