比如員工的考勤資料:
搜索本月那些員工有遲到的:
select * from user where status='遲到'
搜索本月全勤的如何寫呢?
我用: select * from user where status<>'遲到' 也是會顯示已經遲到的。
uj5u.com熱心網友回復:
select * from [user] where status<>'遲到'我這里user可能是關鍵字,需要加方括號.
執行的時候沒發現會顯示已經遲到的.
我寫了個vbs腳本,你可以看看:
鏈接:https://pan.baidu.com/s/1OXiZJXLW_JH9Kh3R98WHmQ
提取碼:lhag
uj5u.com熱心網友回復:
腳本代碼如下: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資料庫:

執行結果:


uj5u.com熱心網友回復:
因為你的 id是不同的,我說的是同一個員工一個月有30筆記錄,除非這30筆都沒有 遲到 ,任何一次遲到當搜索為 <>'遲到' 該名員工就不顯示
uj5u.com熱心網友回復:
這個應該也很簡單,因為有30筆記錄,因此必須有二個表,一個是員工資訊表,一個是員工考勤表,將員工資訊表中的員工姓名存盤在一個陣列中,然后回圈檢測每個員工有沒有遲到、早退、請假、曠工,最后將統計結果顯示出來就可以了。
uj5u.com熱心網友回復:
如果資料量大,影響很大,sql陳述句能處理這個?
uj5u.com熱心網友回復:
你檢測的不是一個月的資料嗎?在 員工考勤表 中 添加 日期 欄位,根據日期查詢不存在資料量特別大的問題,即就是查詢一年的資料,每個員工,也就是不到400條記錄,連500毫秒都用不上。uj5u.com熱心網友回復:
回復 QQ342151559:關鍵問題是資料表的設計,資料表設計合理,界面設計合理,代碼也沒有問題,程式運行是非常快的。
uj5u.com熱心網友回復:
有沒有先搜索得到 '遲到' 的資料集,然后搜索不在這個資料集里的資料,這個思路應該可以把,不過咋寫
uj5u.com熱心網友回復:
select id from user where id not in (select id from user where status='遲到')uj5u.com熱心網友回復:
搜索 id不在 有遲到的id資料集內,但一直在圈圈,沒有結果,陳述句有啥問題?uj5u.com熱心網友回復:
根據你的要求和提示修改了一下:代碼:
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
uj5u.com熱心網友回復:
如果是SqlServer的話可以試試這個:select distinct name from [user] t1 where not contains(name,'遲到');
uj5u.com熱心網友回復:
如果是SqlServer的話可以試試這個:
select distinct name from [user] t1 where not contains(name,'遲到');
看來我好像理解錯contains的意思了,contains的意思是在某個欄位的某個資料中進行全文搜索,而不是在某個欄位的全部資料中查找關鍵字并回傳結果.
所以這里不能用contains,應該用我上邊的方法,也就是子查詢.
uj5u.com熱心網友回復:
如果按照范式來設計表結構,你應該還有一張全體員工表,然后你這張表應該叫員工考勤明細表。并且考勤記錄應該還有考勤日期。判定全勤,應該是正常考勤的天數等于某個時間段內的正常作業日。
select name,count(1)
from user
where 考勤日期 between (起始日期,結束日期)
group by name
having count(1) = 考勤日期范圍內的作業日天數
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/38712.html
下一篇:大神,幫幫忙,急!!!!
