Sql 您试图执行的查询未将指定的表达式“out\u time”作为ms access中的聚合函数
我使用Ms access作为我的数据库,并使用以下查询获取工作时间:Sql 您试图执行的查询未将指定的表达式“out\u time”作为ms access中的聚合函数,sql,ms-access,Sql,Ms Access,我使用Ms access作为我的数据库,并使用以下查询获取工作时间: select in_time, out_time, datediff("n",b.in_time,c.out_time) as work_time, log_date, emp_id from (select LogTime as in_time, SrNo, LogID as emp
select
in_time,
out_time,
datediff("n",b.in_time,c.out_time) as work_time,
log_date,
emp_id
from
(select
LogTime as in_time,
SrNo,
LogID as emp_id,
LogDate as log_date
from LogTemp
where Type='IN' ) as b
left join
(select
SrNo as out_id,
LogTime as out_time,
LogID as out_emp_id,
LogDate as out_log_date
from LogTemp
where Type = 'OUT'
group by SrNo) as c
on (b.SrNo <> c.out_id
and b.emp_id = c.out_emp_id
and b.log_date = out_log_date )
where
c.out_id > b.SrNo and
[log_date] >= #8/20/2012# and
[log_date] <= #8/20/2012# and
emp_id = "8"
group by b.SrNo;
任何关于我在哪里犯错误的建议。如果你试图分组,你会有几个错误。首先,检查一下机器 基本上,如果使用GROUP BY,则SELECT子句中不受SUM、AVG等聚合函数影响的任何列都应该出现在GROUP BY子句中,而不必深入讨论。因此,在您的案例中,您应该添加:
LogTime as out_time,
LogID as out_emp_id,
LogDate as out_log_date
进入第二个子查询的分组依据。加
in_time,
out_time,
datediff("n",b.in_time,c.out_time) as work_time,
log_date,
emp_id
在主组的末尾
但是,正如已经在一条评论中指出的,也许你想要做的是一个订单。然后应该像按顺序替换组一样简单,并且应该可以工作。只需确保这是您想要的。左侧联接处的派生表C不需要任何排序或分组。我看不出为什么它不应该与中的派生表B匹配
left join
(select
SrNo as out_id,
LogTime as out_time,
LogID as out_emp_id,
LogDate as out_log_date
from LogTemp
where Type = 'OUT') as c
外部查询的最终语句应该是前面提到的ORDER BY,因为外部查询没有任何聚合函数
我怀疑你在显式连接上会遇到与MS访问不匹配的问题,所以你可能会考虑把它移到WHERE语句。
on (b.SrNo <> c.out_id
您仅按b.SrNo分组。哪一个输出时间和输入时间,以及记录日期。。。你想要吗?…从外观上看,我猜你的意思是按b.SrNo订购,而不是按GROUP BY订购?非常感谢你的回复,它提到了GROUP BY中的字段,但问题是输出不是比较两行,而是将所有行相互比较![表结构][1]SrNo LOGID LOGDATE LOGTIME TYPE 1 8 8/20/2012 9:32:12 AM我的输出应进行比较,并提供连续行的输入和输出时间差。不是所有的进出行。请找到附加的屏幕。非常感谢您的回复。将字段放入group by后,它可以工作,但问题是输出不是比较两行,而是将所有行相互比较。我的表格结构SrNo LOGID LOGDATE LOGTIME 1 8 8 8/20/2012 9:32:12英寸;2012年8月20日上午9:52.10外出;2012年8月20日上午9时56分10分;2012年8月20日下午12:30外出。我的输出应该比较并提供连续行的输入和输出时间的差异。不是所有的进出行。请找到屏幕。
on (b.SrNo <> c.out_id