2017-03-10 3 views
1

Ich habe drei Tabellen, von denen eine ist ein Hauptkalender, der einen Indikator für Betriebsferien enthält. Ich möchte Holiday von meiner DateDiff-Berechnung ausschließen. Im Folgenden finden Sie, was ich habe ...Sql Server 2008 Firmenurlaub von DateDiff ausschließen

Alarmdatum 12/23/16 vollständige Datum 12/28/16 Firma Ferien 12/26/16 Need von DATEDIFF Berechnung

--Mein Berechnung zeigt an exlude 3 Werktage es Unternehmen 12/26/16 = 2 Tage ausschließen sollte

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 

der Versuch, die Feiertage zu entfernen ist, wo ich bin zu kämpfen, siehe unten.

+0

Weitere Informationen benötigt? – John

+0

Ich bin mir nicht sicher, wie ich die Feiertage behandeln soll. – John

Antwort

0

Nach 2 Fallanweisungen können Sie die folgende Anweisung hinzufügen, um keine Tage von der Feiertagskalendertabelle zu subtrahieren.

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

Der Kalender ist ein vollständiger Kalender mit einem Indikator = y, wenn es einen Feiertag gibt. Dies sollte etwas in der Abfrage dargestellt werden, richtig? Zweitens habe ich Probleme, dies in meine Abfrage oben hinzuzufügen. Kannst du helfen? – John

+0

Ich habe meine Frage aktualisiert, siehe letzte Abfrage Stück auf, wo ich kämpfe. – John

+0

@John, obwohl ich Feiertagskalendertabelle nur Feiertagsdaten haben werde. Unterhalb des Codes können Sie Firmenurlaub subtrahieren. - (Wählen Sie ISNULL (count (1), 0) von Cal wo Cal.CALENDAR_DATE zwischen ALERTS_CREATE_DT UND CreatedDate und GRH_HOLIDAY_IND = 'Y') –