这个sql咋写?access的

QQ342151559 2019-03-02 08:06:16
比如员工的考勤数据:
搜索本月那些员工有迟到的:
select * from user where status='迟到'

搜索本月全勤的如何写呢?
我用: select * from user where status<>'迟到' 也是会显示已经迟到的。
...全文
101 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
milaoshu1020 2019-03-04
  • 打赏
  • 举报
回复
引用 12 楼 milaoshu1020 的回复:
如果是SqlServer的话可以试试这个:
select distinct name from [user] t1 where not contains(name,'迟到');

看来我好像理解错contains的意思了,contains的意思是在某个字段的某个数据中进行全文搜索,而不是在某个字段的全部数据中查找关键字并返回结果.
所以这里不能用contains,应该用我上边的方法,也就是子查询.
milaoshu1020 2019-03-04
  • 打赏
  • 举报
回复
如果是SqlServer的话可以试试这个:
select distinct name from [user] t1 where not contains(name,'迟到');
脆皮大雪糕 2019-03-04
  • 打赏
  • 举报
回复
如果按照范式来设计表结构,你应该还有一张全体员工表,然后你这张表应该叫员工考勤明细表。并且考勤记录应该还有考勤日期。 判定全勤,应该是正常考勤的天数等于某个时间段内的正常工作日。

select name,count(1) 
from  user
where 考勤日期 between (起始日期,结束日期)
group by name
having count(1) = 考勤日期范围内的工作日天数

QQ342151559 2019-03-03
  • 打赏
  • 举报
回复
引用 4 楼 ZHRXJR的回复:
[quote=引用 3 楼 QQ342151559 的回复:]
因为你的 id是不同的,我说的是同一个员工一个月有30笔记录,除非这30笔都没有 迟到 ,任何一次迟到
当搜索为 <>'迟到' 该名员工就不显示


这个应该也很简单,因为有30笔记录,因此必须有二个表,一个是员工信息表,一个是员工考勤表,将员工信息表中的员工姓名存储在一个数组中,然后循环检测每个员工有没有迟到、早退、请假、旷工,最后将统计结果显示出来就可以了。[/quote] 如果数据量大,影响很大,sql语句能处理这个?
ZHRXJR 2019-03-03
  • 打赏
  • 举报
回复
引用 3 楼 QQ342151559 的回复:
因为你的 id是不同的,我说的是同一个员工一个月有30笔记录,除非这30笔都没有 迟到 ,任何一次迟到
当搜索为 <>'迟到' 该名员工就不显示


这个应该也很简单,因为有30笔记录,因此必须有二个表,一个是员工信息表,一个是员工考勤表,将员工信息表中的员工姓名存储在一个数组中,然后循环检测每个员工有没有迟到、早退、请假、旷工,最后将统计结果显示出来就可以了。
QQ342151559 2019-03-03
  • 打赏
  • 举报
回复
因为你的 id是不同的,我说的是同一个员工一个月有30笔记录,除非这30笔都没有 迟到 ,任何一次迟到 当搜索为 <>'迟到' 该名员工就不显示
milaoshu1020 2019-03-03
  • 打赏
  • 举报
回复
根据你的要求和提示修改了一下:
代码:
Set conn = createobject("adodb.connection")
conn.open "provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\BaiduNetdiskDownload\testsql\database1.mdb"
Set rs = createobject("adodb.recordset")
rs.open "select distinct name from [user] t1 where (select count(name) from [user] t2 where t1.name=t2.name and status='迟到')=0",conn,1,3
rs.movefirst
While Not rs.eof
msgbox rs("name")
rs.movenext
Wend

数据库:

结果:

下载地址:
链接:https://pan.baidu.com/s/1OXiZJXLW_JH9Kh3R98WHmQ
提取码:lhag
QQ342151559 2019-03-03
  • 打赏
  • 举报
回复
搜索 id不在 有迟到的id数据集内,但一直在圈圈,没有结果,语句有啥问题?
QQ342151559 2019-03-03
  • 打赏
  • 举报
回复
select id from user where id not in (select id from user where status='迟到')
QQ342151559 2019-03-03
  • 打赏
  • 举报
回复
有没有先搜索得到 '迟到' 的数据集,然后搜索不在这个数据集里的数据,这个思路应该可以把,不过咋写
ZHRXJR 2019-03-03
  • 打赏
  • 举报
回复
回复 QQ342151559:
关键问题是数据表的设计,数据表设计合理,界面设计合理,代码也没有问题,程序运行是非常快的。
ZHRXJR 2019-03-03
  • 打赏
  • 举报
回复
你检测的不是一个月的数据吗?在 员工考勤表 中 添加 日期 字段,根据日期查询不存在数据量特别大的问题,即就是查询一年的数据,每个员工,也就是不到400条记录,连500毫秒都用不上。
milaoshu1020 2019-03-02
  • 打赏
  • 举报
回复
脚本代码如下:
Set conn = createobject("adodb.connection")
conn.open "provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\我的文件\文档\database1.mdb"
Set rs = createobject("adodb.recordset")
rs.open "select * from [user] where status<>'迟到'",conn,1,3
rs.movefirst
While Not rs.eof
msgbox rs("status")
rs.movenext
Wend

数据库:

执行结果:


milaoshu1020 2019-03-02
  • 打赏
  • 举报
回复
select * from [user] where status<>'迟到'
我这里user可能是关键字,需要加方括号.
执行的时候没发现会显示已经迟到的.
我写了个vbs脚本,你可以看看:
链接:https://pan.baidu.com/s/1OXiZJXLW_JH9Kh3R98WHmQ
提取码:lhag

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧