2017-03-10 7 views
1

私は3つのテーブルを持っています。そのうちの1つは、会社の休日のインジケータを格納するマスターカレンダーです。私は、私のDateDiff計算から休日を除外したいと思います。以下はSql Server 2008 DateDiffから会社休暇を除外

警戒日12/23/16 完全な日付12/28/16 会社ホリデー12/26/16がDATEDIFF計算からエクスクルードする必要が

--My計算ショー...私が持っているものです3営業日、それは私が苦労してるところ休日をされて削除しようとすると12/26/16 = 2営業日

DATEDIFF(DD,A.ALERTS_CREATE_DT,S.CreatedDate) 
      -(DATEDIFF(WK,A.ALERTS_CREATE_DT,S.CreatedDate) * 2) --HOW MANY WEEKEND DAYS PASSED BY 
      -(CASE WHEN DATENAME(DW,A.ALERTS_CREATE_DT) = 'Sunday' THEN 1 ELSE 0 END) 
      -(CASE WHEN DATENAME(DW,S.CreatedDate) = 'Saturday' THEN 1 ELSE 0 END) 
      -(CASE WHEN CAL.GRH_HOLIDAY_IND = 'Y' THEN 1 ELSE 0 END) 
      -( SELECT COUNT(CAL.GRH_HOLIDAY_IND) 
       FROM A 
       FULL OUTER JOIN S ON A.ID= S.ID 
       INNER JOIN CAL ON A.ALERTCREATEDT_MMDDYYYY = CAL.CALENDAR_DATE 
       WHERE 1=1 
       AND Cal.GRH_HOLIDAY_IND = 'Y' 
       AND CAL.CALENDAR_DATE between CAST(A.CREATE_DT AS DATE) AND CAST(S.CreatedDate AS DATE)) AS BusinessDays 

除外する必要があり、以下を参照してください。

-( SELECT COUNT(CAL.GRH_HOLIDAY_IND) 
       FROM A 
       FULL OUTER JOIN S ON A.ID= S.ID 
       INNER JOIN CAL ON A.ALERTCREATEDT_MMDDYYYY = CAL.CALENDAR_DATE 
       WHERE 1=1 
       AND Cal.GRH_HOLIDAY_IND = 'Y' 
       AND CAL.CALENDAR_DATE between CAST(A.CREATE_DT AS DATE) AND CAST(S.CreatedDate AS DATE 
+0

その他の情報は必要ですか? – John

+0

祝日を除外する方法についてはわかりません。 – John

答えて

0

2つのケースステートメントの後で、休日のカレンダーテーブルから日数を引くために、次のステートメントを追加することができます。

- (select ISNULL(count(1),0) from Cal where Cal.Holiday between ALERTS_CREATE_DT AND CreatedDate) 
+0

休日があるときは、カレンダーはインジケータ= yのフルカレンダーです。これは、クエリ内のsomehwereで表される必要がありますか?第二に、上記の質問にこれを追加することができません。手伝ってくれますか? – John

+0

私は自分の質問を更新しました。最後の質問を参照してください。 – John

+0

@ジョン、私は休日のカレンダーテーブルは休日の日付しか持っていません。以下のコードでは、会社の休暇を引くことができます。 - (ALERTS_CREATE_DTとCreatedDateとGRH_HOLIDAY_IND = 'Y'の間のCal.CALENDAR_DATE)からCalからISNULL(count(1)、0)を選択してください。 –

関連する問題