首先,我們有這樣一張表
我們要知道兩個日期間的工作日天數,相信大家有遇到過這個噁心人的需求,所謂工作日,不簡簡單單的就是除週六日以外的日子。要考慮到節假日,國慶啊,中秋啊,最讓人頭疼的是,你根本無法掌控節假日的規律,因爲他就是無規律可言。
所以要求出工作日的天數,我們還需要一張假日表,這張表可以幫助我們分清到底那天是節假日,那天是工作日,在末尾我會附上網盤鏈接,這個表是怎麼來的大家應該都清楚,說了無規律,那麼只能人工一個個比對了。
基本的需求就是用這兩張表關聯,求出第一張表的兩個日期間的工作日天數即可
我們可以選擇這樣,一開始我有一個思路,就是求出來日期間的所有天數,然後將此表與假期表關聯查詢假日有多少天,相減不就正確了,然後我搞了半天才發現,這個好像沒辦法關聯。。所以我們只能用第二種辦法。
第二種辦法,就是講第一張表拆分,就例如,將這樣的一條數據
拆分爲這樣
然後再用日期列,去關聯假日表的數據,把非工作日的去除,剩下的條數就是工作日的天數。
假日表中:
對應的三天都爲工作日,那麼最終就是這三條,最後GROUP BY id 列,求出COUNT(*),就是最後的天數,下面上代碼。
第一張日期表:[DW].[dbo].[TAB Row Data From ECC temp6]
第二章假日表:[TAB].[dbo].[holiday]
具體字段上邊都有對應,請自行更改
SELECT
id,
[SP PO creation Date],
[HUB GI date],
COUNT (*) AS COUNT
FROM
(
SELECT
id,
[SP PO creation Date],
[HUB GI date],
DATEADD(
DAY,
number,
[SP PO creation Date]
) AS riqi
FROM
[DW].[dbo].[TAB Row Data From ECC temp6] AS A
INNER JOIN master..spt_values AS B ON DATEADD(
DAY,
number,
[SP PO creation Date]
) <= [HUB GI date]
AND B.[type] = 'P'
order by id,riqi
AND NOT EXISTS (
SELECT
1
FROM
[TAB].[dbo].[holiday] b
WHERE
[DAY_WORK] = 2
AND DATEADD(
DAY,
number,
[SP PO creation Date]
) = CONVERT (DATE, [DATE_ID])
)
) a
GROUP BY
id,
[SP PO creation Date],
[HUB GI date]
最後截圖:
接下來大家期待已久的整理出來的假期表:直接上。
鏈接:https://pan.baidu.com/s/1J9pVGX4xMbsUe69txCGg_Q
提取碼:lhaj