2017-10-09 59 views
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

這可能是與正火做。改爲使用下列字段的子表:「資源ID」,「DayOfWeek」,「Works」(其中Works是布爾0/1字段,「DayofWeek」是表示星期幾的數字。資源ID和星期幾的組合,這樣可以使編寫與此數據有關的有用查詢變得容易很多,您可能還需要用其他方法對其進行優化,例如開始/結束日期,以便您瞭解工作中的變化模式隨着時間的推移你現在得到的東西是不靈活的,不會讓你得到你需要的信息,不容易 – 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