访问:表达式太复杂而无法评估 - SUM时间值

时间:2017-02-04 23:15:57

标签: sql ms-access

我正在使用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];

但是我得到了错误:表达式太复杂而无法评估

2 个答案:

答案 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
相关问题