Sql 访问:表达式太复杂,无法计算-求和时间值

Sql 访问:表达式太复杂,无法计算-求和时间值,sql,ms-access,Sql,Ms Access,我正在用Access做一个简单的应用程序,我有一个查询: SELECT QryInOutMday.[_USERID], QryInOutMday.[_WORKING] FROM QryInOutMday; 获取下一个值时不会出现问题: _用户ID_正在工作 ----------------- 7607:33:15 7616:22:54 6808:01:22 7707:33:15 7707:50:00 我尝试将工作时间相加,并将其与用户id分组,如下所示: SELECT QryInOutMday

我正在用Access做一个简单的应用程序,我有一个查询:

SELECT QryInOutMday.[_USERID], QryInOutMday.[_WORKING]
FROM QryInOutMday;
获取下一个值时不会出现问题:

_用户ID_正在工作
-----------------
7607:33:15
7616:22:54
6808:01:22
7707:33:15
7707:50:00

我尝试将工作时间相加,并将其与用户id分组,如下所示:

SELECT QryInOutMday.[_USERID], SUM(QryInOutMday.[_WORKING])
FROM QryInOutMday
GROUP BY QryInOutMday.[_USERID];

但是我得到了一个错误:表达式太复杂,无法计算

我不确定这个错误是什么意思。但问题是,您无法对时间值求和。您可以将其转换为一个单位,然后求和:

SELECT iom.[_USERID],
       SUM(DATEDIFF("s", 0, iom.[_WORKING])) as total_seconds
FROM QryInOutMday as iom
GROUP BY iom.[_USERID];
您可以使用
格式
是否希望获得格式为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];

如果[_WORKING]是Date,它应该可以工作。如果是文本,首先转换为日期:

SELECT QryInOutMday.[_USERID], SUM(CDate(QryInOutMday.[_WORKING]))
FROM QryInOutMday
GROUP BY QryInOutMday.[_USERID];
如果可能存在空值,请过滤掉这些值或使用CVDate:

如果总和可能超过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

我试着按如下方式计算每一个小时和分钟:选择QryInOutMday.[u USERID],COUNT(QryInOutMday.[u USERID])作为工作日,Int(SUM(DATEDIFF(“h”,0,QryInOutMday.[u WORKING]))作为工作小时,Int(SUM(DATEDIFF(“n”,0,QryInOutMday.[u WORKING]))作为QryInOutMday组中的工作日,由QryInOutMday.[u USERID]);现在我得到的小时数是int“23”,分钟数是int“1435”,分钟数应该是1435-23*60=“55”,我怎么能得到呢?“你不能求时间值的和”。。。哦,你当然可以。
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