我正在使用Access做一个简单的应用程序,我正在查询:
SELECT QryInOutMday.[_USERID], QryInOutMday.[_WORKING]
FROM QryInOutMday;
获得下一个没有问题的值:
_USERID _WORKING
-------- ---------
76七点33分15秒
76 16点22分54秒
68 8时01分22秒
77七点33分15秒
77 7点50分○○秒
我正在尝试将工作时间相加并使用以下用户ID对它们进行分组:
SELECT QryInOutMday.[_USERID], SUM(QryInOutMday.[_WORKING])
FROM QryInOutMday
GROUP BY QryInOutMday.[_USERID];
但是我得到了错误:表达式太复杂而无法评估
答案 0 :(得分:0)
我不确定错误的含义。但问题是你无法总结时间价值。您可以转换为单位,然后将它们相加:
SELECT iom.[_USERID],
SUM(DATEDIFF("s", 0, iom.[_WORKING])) as total_seconds
FROM QryInOutMday as iom
GROUP BY iom.[_USERID];
你可以使用format
你喜欢格式为hh:mm:ss:
SELECT iom.[_USERID],
FORMAT(SUM(DATEDIFF("s", 0, iom.[_WORKING]))/(24*60*60), "hh:mm:ss") as total_hhmmss
FROM QryInOutMday as iom
GROUP BY iom.[_USERID];
答案 1 :(得分:0)
如果[_WORKING]是日期,它应该有用。如果是 text ,请先转换为日期:
SELECT QryInOutMday.[_USERID], SUM(CDate(QryInOutMday.[_WORKING]))
FROM QryInOutMday
GROUP BY QryInOutMday.[_USERID];
如果 Null 值可能存在,请将其过滤掉或使用 CVDate :
SELECT QryInOutMday.[_USERID], SUM(CVDate(QryInOutMday.[_WORKING]))
FROM QryInOutMday
GROUP BY QryInOutMday.[_USERID];
如果总和可能超过24小时,您可以使用此功能读取格式为小时和分钟的总和:
Public Function FormatHourMinute( _
ByVal datTime As Date, _
Optional ByVal strSeparator As String = ":") _
As String
' Returns count of days, hours and minutes of datTime
' converted to hours and minutes as a formatted string
' with an optional choice of time separator.
'
' Example:
' datTime: #10:03# + #20:01#
' returns: 30:04
'
' 2005-02-05. Cactus Data ApS, CPH.
Dim strHour As String
Dim strMinute As String
Dim strHourMinute As String
strHour = CStr(Fix(datTime) * 24 + Hour(datTime))
' Add leading zero to minute count when needed.
strMinute = Right("0" & CStr(Minute(datTime)), 2)
strHourMinute = strHour & strSeparator & strMinute
FormatHourMinute = strHourMinute
End Function