A. 問,sql關於查詢考勤系統.
遇到此類問題考慮的方向共有兩種:
1。自然連結(術語叫:兩個關系的笛卡爾積)
將你的現在的表與一個日期表進行廣義笛卡爾積,知道吧?就是兩個表的乘法,結果是列為兩個表列的總和,行為兩個表的行乘積。
如:A表
a.a a.b a.c
1 2 3
4 5 6
B表
b.a b.b b.c
1 5 9
3 2 8
A*B的結果就是:
a.a a.b a.c b.a b.b b.c
1 2 3 1 5 9
1 2 3 3 2 8
4 5 6 1 5 9
4 5 6 3 2 8
明白嗎?
然後與現有表進行相減!A-B所得結果就是A表中有而B表中沒有的記錄。這樣可以解決你的類似問題。
2。還有可以用程序實現:
如:查某一天的員工不在信息時,可以在考勤表中該天的所以到的員工,而用員工表相差實現。如:select * from 員工表where 姓名 not in (select 姓名 from 考勤表 where 日期=當天),當然也可以實現兩表相連結後結果。
至於查總缺的次數,可以先查該月的總出勤次數就行了!這個我想你不會不會吧?用一個recordcount就行了!
我所說的程序就在這里,一個月只能查出缺勤次數,而缺勤日期,要用一個程序去頻繁調用數據(可能是表或視圖)去計算。資料庫可能效率極低!但總可以實現的!
B. sql存儲過程實例,一個關於上下班考勤的存儲過程,高分
select [員工名字],min([簽到時間]) [簽到時間]
from [表]
where [簽到時間]<'12:00'
group by [員工名字]
union
select [員工名字],max([簽到時間]) [簽到時間]
from [表]
where [簽到時間]>'12:00'
group by [員工名字]
看有沒有遲到早退用case 語句將簽到時間和正常上下班時間比較就好了
C. SQL如何判斷打卡記錄是否異常
casewhen
日期欄位in(between7.30and8.00,between12.00and12.30,between13.30and14.00,between18and18.30)then『正常』else『異常』end,
大概就是這么寫吧,這個欄位,把時間欄位處理一下應該就行
D. 問一個考勤SQL語句的問題,想查詢一整月考勤記錄
select 員工ID,a.[1] 上班時間,b.[1] 下班時間,datediff(mm,b.[1] - a.[1]) 累計時間,
a.[2] 上班時間,b.[2] 下班時間,datediff(mm,b.[2] - a.[2]) 累計時間,.......
from
( select 員工ID,上班時間 from 考勤表
pivot ( min( 考勤時間) for datepart(dd, 考勤時間) in ( [1],[2],[3],................... )) as pvt ) a,
( select 員工ID,上班時間 from 考勤表
pivot ( mxn( 考勤時間) for datepart(dd, 考勤時間) in ( [1],[2],[3],................... )) as pvt ) b
where a.員工ID = b.員工ID
E. SQL 考勤問題
很悲催的告訴你,只能挨個核對,好點的話,用函數判斷。
我們單位用的軟體考勤(叮咚簽到),出來的表直接顯示遲到,早退什麼的,灰常方便。。。
F. SQL 統計每日上班打卡和下班打卡語句
這是在oracle資料庫下做的,不知道你是什麼資料庫,給你提供一下思路
select
card_no,
attr_date,
to_char(atte_time,'HH24:MI')tim,
doorinout,
rn
from (
select
card_no,
attr_date,
atte_time,
doorinout,
ROW_NUMBER() OVER(PARTITION BY card_no,attr_date,doorinout ORDER BY atte_time asc) rn
from(
select
card_no,
(
case
when doorinout=1
then to_date(to_char(atte_time,'yyyy-MM-dd'),'yyyy-MM-dd')
when (doorinout=0 and to_number(to_char(atte_time,'HH24'))<3)
then (to_date(to_char(atte_time,'yyyy-MM-dd'),'yyyy-MM-dd')-1)
else to_date(to_char(atte_time,'yyyy-MM-dd'),'yyyy-MM-dd')
end
)attr_date,
atte_time,
doorinout
from AtteTime
) tmp order by card_no,atte_time asc,doorinout desc
) where rn < 5
G. 求助求助,一條SQL統計考勤情況,下面的當天缺勤次數,統計不出來,幫我寫出來,謝謝
把上面 「上午上班=null」 替換為
nvl((select time from qin_record where timeslotid=2 and curdate=r.curdate limit 1),'SWCD') = 'SWCD'
其他的也都替換下,null判斷時是用 is null,不是 「=」,盡量不要用null直接進行判斷,對於空值會判斷不出來。可以用 nvl(欄位,'NULL') = 'NULL' 的形式進行判斷。
在試一下。
不要用 別名進行比較,而且還是中文的別名,看著很蛋疼啊...
H. 基於SQL的考勤查詢系統----學習探討
卡機系統的數據結構一般分為:考勤一套,請假一套,加班一套。
考勤不會刻意每個欄位判斷一次是早上卡還是晚上卡,而是根據員工對應排班表來自行決定時間對應的考勤Type。
請假一般分帶薪、半薪、無薪,調休四類。然後帶薪假和半薪假一般會分順延和扣減兩類。
加班則分大,中,小三個類別,對應3工,2工,1.5工。調休則優先對應3工、2工類型扣減。
而且還需要處理跨天(我建議設置大於24小時,方便計算),調班等問題
I. sql關於查詢考勤系統查詢
再建立一個上班日期表,表內時應上班日期,因有節假日問題,如果是餐飲這種每人不固定的情況,只能建立人員上班情況表了。
建立存儲過程
循環一,人員檔案;
循環二,上班日期表,找出本月應上班的日期;
缺勤天數變數,簽到表日期不在上班日期表的,為缺勤,count出天數
循環三,簽到表;
缺勤時間,簽到表中時間對不上,上下班時間的進行累計;
有請假、倒休、公休情況,找到對應的請假表,進行對比,調整缺勤天數和缺勤時間變數。
J. sql 考勤統計查詢
select name,dept,count(*) 工作天數,sum(xbsj-sbsj) 工作累計時間,count(case when kqqk=1 then 1 end) 遲到天數,count(case when kqqk=2 then 1 end) 早退天數
from table1 join table2 on table1.uid=table2.uid
group by name,dept