我有一种情况,我必须找出一个人在给定日期范围内(从-到)在场/工作的天数
父表的数据存储在#EMP中,天位表示他的工作日,我有#EMPCHILD,其中他的出勤按日期标记,
我必须计算员工工作了多少天(不包括休息日),我不知道如何查询它给我的员工工作日期之间的计数。 请帮助任何人,下面我粘贴带有数据的表的 SQL 脚本
CREATE TABLE #EMP
(
eid INT default 0,
sun bit default 1,
mon bit default 1,
tue bit default 1,
wed bit default 1,
thu bit default 1,
fri bit default 1,
sat bit default 1
)
CREATE TABLE #EMPCHILD
(
eid INT default 0,
[date] DATETIME
)
INSERT INTO #EMP VALUES(1,0,1,0,0,1,1,1)
INSERT INTO #EMP VALUES(2,0,0,1,0,1,1,1)
INSERT INTO #EMP VALUES(3,0,1,0,0,1,1,1)
INSERT INTO #EMP VALUES(4,1,1,0,0,1,1,1)
INSERT INTO #EMPCHILD VALUES(1,'2014-03-01')
INSERT INTO #EMPCHILD VALUES(1,'2014-03-02')
INSERT INTO #EMPCHILD VALUES(1,'2014-03-03')
INSERT INTO #EMPCHILD VALUES(1,'2014-03-04')
INSERT INTO #EMPCHILD VALUES(1,'2014-03-05')
INSERT INTO #EMPCHILD VALUES(1,'2014-03-06')
INSERT INTO #EMPCHILD VALUES(1,'2014-03-07')
INSERT INTO #EMPCHILD VALUES(1,'2014-03-08')
INSERT INTO #EMPCHILD VALUES(1,'2014-03-09')
INSERT INTO #EMPCHILD VALUES(3,'2014-03-10')
INSERT INTO #EMPCHILD VALUES(3,'2014-03-01')
INSERT INTO #EMPCHILD VALUES(3,'2014-03-02')
INSERT INTO #EMPCHILD VALUES(3,'2014-03-03')
INSERT INTO #EMPCHILD VALUES(2,'2014-03-04')
INSERT INTO #EMPCHILD VALUES(3,'2014-03-05')
INSERT INTO #EMPCHILD VALUES(4,'2014-03-06')
INSERT INTO #EMPCHILD VALUES(2,'2014-03-07')
INSERT INTO #EMPCHILD VALUES(4,'2014-03-08')
INSERT INTO #EMPCHILD VALUES(3,'2014-03-09')
INSERT INTO #EMPCHILD VALUES(3,'2014-03-10')
INSERT INTO #EMPCHILD VALUES(2,'2014-03-01')
INSERT INTO #EMPCHILD VALUES(3,'2014-03-01')
INSERT INTO #EMPCHILD VALUES(4,'2014-03-01')
INSERT INTO #EMPCHILD VALUES(2,'2014-03-02')
INSERT INTO #EMPCHILD VALUES(3,'2014-03-01')
INSERT INTO #EMPCHILD VALUES(1,'2014-03-01')
INSERT INTO #EMPCHILD VALUES(2,'2014-03-03')
INSERT INTO #EMPCHILD VALUES(4,'2014-03-04')
INSERT INTO #EMPCHILD VALUES(3,'2014-03-01')
SELECT * from #EMP
SELECT * from #EMPCHILD
DROP TABLE #EMP
DROP TABLE #EMPCHILD
现在我希望它将计算员工的工作天数(以及加类时间)作为天数 2014-01-01 至 2014-01-08
通过应用以下查询:
SELECT #EMP.eid,COUNT(*) FROM #EMP
LEFT JOIN #EMPCHILD ON #EMPCHILD.eid = #EMP.eid
WHERE #EMPCHILD.[Date] between '2014-03-01' AND '2014-03-08'
GROUP BY #EMP.eid
最佳答案
http://sqlfiddle.com/#!6/3255c/20
DECLARE @StartDate DATETIME = '2014-03-01'
DECLARE @EndDate DATETIME = '2014-03-09'
DECLARE @EId INT = 1
SELECT EC.*,
CASE DATEPART(dw, [date])
WHEN 1 THEN sun
WHEN 2 THEN mon
WHEN 3 THEN tue
WHEN 4 THEN wed
WHEN 5 THEN thu
WHEN 6 THEN fri
WHEN 7 THEN sat
END AS IsWorkingDay
FROM EMPCHILD EC
INNER JOIN EMP E
ON E.eid = EC.eid
WHERE [date] >= @StartDate
AND [date] < @EndDate
AND EC.eid = @EId
编辑后: http://sqlfiddle.com/#!6/3255c/22
DECLARE @StartDate DATETIME = '2014-03-01'
DECLARE @EndDate DATETIME = '2014-03-09'
SELECT Eid, COUNT(1)
FROM (
SELECT EC.*,
CASE DATEPART(dw, [date])
WHEN 1 THEN sun
WHEN 2 THEN mon
WHEN 3 THEN tue
WHEN 4 THEN wed
WHEN 5 THEN thu
WHEN 6 THEN fri
WHEN 7 THEN sat
END AS IsWorkingDay
FROM EMPCHILD EC
INNER JOIN EMP E
ON E.eid = EC.eid
WHERE [date] >= @StartDate
AND [date] < @EndDate
) tbl
WHERE IsWorkingDay = 1
GROUP BY Eid
关于sql - 计算不包括假期的工作天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22249186/