2017-10-09 11 views
2

근무 시간과 리소스가 포함 된 테이블이 있습니다. 예를 들어 한 사람은 월요일부터 금요일까지 일할 수 있지만 다른 한 사람은 그 주간에 2 일만 근무할 수 있습니다. 여기 데이터입니다 : (. 서식하지만 스크린 샷은 늘 우리의 빌어 먹을 프록시를 통해 업로드의 부족에 대한 사과)SQL - 근무일 기준으로 근무일 찾기

WorkOnSunday WorkOnMonday WorkOnTuesday WorkOnWednesday WorkOnThursday WorkOnFriday WorkOnSaturday 
-------------------------------------------------------------------------------------------------------------- 
0    1    1    1    1    1    0 
0    0    1    1    0    0    0 

그래서 질문은 내가에서 근무 일의 양을 얻는 방법이다 위의 데이터를 사용하여 월? (공휴일은 다음 단계이다 나는 우리가 분명히 가지고있는 휴일 테이블의 보류 얻기 위해 시도하고있다.) 여기

을 내가 지금까지 무엇을 가지고 :

DECLARE @StartDate DATETIME 
DECLARE @EndDate DATETIME 
SET @StartDate = '2017/12/01' 
SET @EndDate = '2018/01/01' 


SELECT 
    (DATEDIFF(dd, @StartDate, @EndDate)) 
    -(DATEDIFF(wk, @StartDate, @EndDate) * 2) 
    -(CASE WHEN DATENAME(dw, @EndDate) = 'Saturday' THEN 1 ELSE 0 END) 
    -(CASE WHEN DATENAME(dw, @StartDate) = 'Sunday' THEN 1 ELSE 0 END) 

이 나에게 정확한 양을 제공합니다 평일의 달 중

+0

이 당신의 수를 할 수있는 일단. "Resource ID", "DayOfWeek", "Works"(Works는 부울 0/1 필드이고 "DayofWeek"는 요일을 나타내는 숫자입니다.) 기본 키는 다음과 같습니다. Resource ID와 Day of Week의 조합을 사용하면이 데이터와 관련된 유용한 쿼리를 작성하는 것이 훨씬 쉬워 질 것입니다. 또한 작업의 변경 사항을 이해할 수 있도록 시작일/종료일과 같은 다른 항목으로 수정해야 할 수도 있습니다. 패턴은 시간이 지남에 따라 달라질 수 있습니다. 현재 가지고있는 것은 유연성이 부족하여 필요한 정보를 쉽게 얻을 수있는 것은 아닙니다. – ADyson

+0

첫 번째 테이블에서 중요한 정보 인 누락 된 리소스 ID와 주간 시작 또는 종료 날짜가있는 것처럼 보입니다. – Greenspark

+0

올바른 테이블 구조를 게시하십시오. – Amit

답변

1

귀하의 달에 매일 얼마나 많은 일이 발생하는지 알아야합니다.
다음 쿼리를 통해 도움을받을 수 있습니다.

declare @from datetime= '2017/12/01' 
declare @to datetime = '2018/01/01' 

select 
datediff(day, -7, @to)/7-datediff(day, -6, @from)/7 AS MON, 
datediff(day, -6, @to)/7-datediff(day, -5, @from)/7 AS TUE, 
datediff(day, -5, @to)/7-datediff(day, -4, @from)/7 AS WED, 
datediff(day, -4, @to)/7-datediff(day, -3, @from)/7 AS THU, 
datediff(day, -3, @to)/7-datediff(day, -2, @from)/7 AS FRI, 
datediff(day, -2, @to)/7-datediff(day, -1, @from)/7 AS SAT, 
datediff(day, -1, @to)/7-datediff(day, 0, @from)/7 AS SUN 

당신이 정상화와 함께 할 수있는 테이블

+0

감사합니다. 나는 아마도 다른 데이터에 대해 일한 시간을 계산하기 위해 이것을 사용할 수 있습니다. – Timmo

+0

그건 실제로 아이디어입니다. 지금 해결할 것이라고 확신합니다. – GuidoG

+0

작동했습니다. 나는 이것을 사용하여 그 달의 일수를 얻은 다음 그 날 자원이 작동하면 카운터에 추가됩니다. – Timmo