@dt_endSELECT@bz=1,@dt=@dt_bsegin,@dt_begin=@dt_end,@dt_end=@dtELSESET@bz=0SEL" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

缺勤天數統計的處理示例.sql

系統 1616 0

--計算兩個日期之間相差的工作天數
CREATE FUNCTION f_WorkDateDiff(
@dt_begin datetime,
@dt_end datetime)
RETURNS int
AS
BEGIN
?DECLARE @workday int,@i int,@bz bit,@dt datetime
?IF @dt_begin>@dt_end
??SELECT @bz=1,@dt=@dt_bsegin,@dt_begin=@dt_end,@dt_end=@dt
?ELSE
??SET @bz=0
?SELECT @i=DATEDIFF(Day,@dt_begin,@dt_end)+1,
??@workday=@i/7*5,
??@dt_begin=DATEADD(Day,@i/7*7,@dt_begin)
?WHILE @dt_begin< =@dt_end
?BEGIN
??SELECT @workday=CASE
???WHEN (@@DATEFIRST+DATEPART(Weekday,@dt_begin)-1)%7 BETWEEN 1 AND 5
???THEN @workday+1 ELSE @workday END,
???@dt_begin=@dt_begin+1
?END
?RETURN(CASE WHEN @bz=1 THEN -@workday ELSE @workday END)
END
GO

--測試數據
CREATE TABLE tb(Name varchar(10),WorkDate datetime)
INSERT tb SELECT 'aa','2005-01-03'
UNION ALL SELECT 'aa','2005-01-04'
UNION ALL SELECT 'aa','2005-01-05'
UNION ALL SELECT 'aa','2005-01-06'
UNION ALL SELECT 'aa','2005-01-07'
UNION ALL SELECT 'aa','2005-01-10'
UNION ALL SELECT 'aa','2005-01-14'
UNION ALL SELECT 'aa','2005-01-17'
UNION ALL SELECT 'bb','2005-01-11'
UNION ALL SELECT 'bb','2005-01-12'
UNION ALL SELECT 'bb','2005-01-13'
UNION ALL SELECT 'bb','2005-01-10'
UNION ALL SELECT 'bb','2005-01-14'
UNION ALL SELECT 'bb','2005-01-20'
GO

--缺勤統計
DECLARE @dt_begin datetime,@dt_end datetime
SELECT @dt_begin='2005-1-1', --統計的開始日期
?@dt_end='2005-1-20'??????? --統計的結束日期

--統計
SELECT Name,Days=SUM(Days) FROM(
?SELECT Name,Days=dbo.f_WorkDateDiff(
???DATEADD(Day,1,WorkDate),
???ISNULL(DATEADD(Day,-1,(
????SELECT MIN(WorkDate) FROM tb aa
????WHERE Name=a.Name
?????AND WorkDate>a.WorkDate AND WorkDate< =@dt_end
?????AND NOT EXISTS(
??????SELECT * FROM tb
??????WHERE WorkDate>@dt_begin AND WorkDate< =@dt_end
???????AND Name=aa.Name
???????AND dbo.f_WorkDateDiff(WorkDate,aa.WorkDate)=2))
????),@dt_end))
?FROM(
??SELECT Name,WorkDate FROM tb
??WHERE WorkDate>=@dt_begin AND WorkDate<@dt_end
??UNION ALL --為每組編號補充查詢起始編號是否缺號的輔助記錄
??SELECT DISTINCT Name,DATEADD(Day,-1,@dt_begin) FROM tb
?)a
?WHERE (@@DATEFIRST+DATEPART(Weekday,WorkDate)-1)%7 BETWEEN 1 AND 5
??AND NOT EXISTS(
???SELECT * FROM tb
???WHERE WorkDate>@dt_begin AND WorkDate< =@dt_end
????AND Name=a.Name
????AND dbo.f_WorkDateDiff(WorkDate,a.WorkDate)=-2)
)aa GROUP BY Name
/*--結果
Name?????? Days
---------------- -----------
aa???????? 6
bb???????? 8
--*/

缺勤天數統計的處理示例.sql


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 色老头久久网 | 久青草视频免费视频播放线路1 | 日韩xx00 | 免费视频网站一级人爱视频 | 亚洲欧洲国产经精品香蕉网 | 日韩免费福利视频 | 尹人久久久香蕉精品 | 真实国产乱人伦在线视频播放 | 尹人香蕉久久99天天 | 国产精品天天看 | 欧美精品一区二区三区久久 | 香蕉久久综合精品首页 | 国产做受视频激情播放 | 一级看片| 国产一区在线观看免费 | 欧美一区日韩一区中文字幕页 | 精品免费国产一区二区三区 | 国产精品亚洲二区在线 | 九九视频在线看精品 | 国产午夜影院 | 成年午夜性视频免费播放 | 狠狠久久久久综合网 | 亚洲女bbwxxxx另类 | 国产精品久久久久久搜索 | 狠狠色狠狠色综合 | 国产精品九九 | 日本特级爽毛片叫声 | 欧美最猛的24k毛片视频 | 麻豆精品国产免费观看 | 久久性生活 | 国产精品视频在线免费观看 | 国产成人精品久久一区二区三区 | 国产精品免费久久久免费 | 亚洲国产成人久久一区久久 | 二级片毛片 | 久草热久草在线 | 天天做天天添天天谢 | 免费视频日韩 | 亚洲99久久久久综合 | 337p欧美超大胆日本人术艺术 | 成年午夜性视频免费播放 |