2017-03-09 71 views
0

我有下面的查詢,它使用了一個case語句。我希望過兩次約會,但不包括週末的日子。 我有那個excutes以下,但現在我想從這個排除週六和週日... AND DATEDIFF(DD,A.ALERTS_CREATE_DT,S.CreatedDate)< = 2EMBEDDED DATEDIFF EXCLUD WEEKENDS + CASE STATEMENT

CASE WHEN 
S.Name IN ('Assessment','Survey') 
    AND A.ALERT_DESC = 'ER'  
    AND CAST(A.ALERTS_CREATE_DT AS DATE) <= CAST(S.CreatedDate AS DATE) 
AND DATEDIFF(DD,A.ALERTS_CREATE_DT,S.CreatedDate) <= 2 /*EXCLUDE Sat and Sunday from the calculation*/ 

完整的查詢

SELECT 

    CASE WHEN 
    S.Name IN ('Assessment','Survey') 
     AND A.ALERT_DESC = 'ER'  
     AND CAST(A.ALERTS_CREATE_DT AS DATE) <= CAST(S.CreatedDate AS DATE) 
     AND 
     (DATEDIFF(DD,A.ALERTS_CREATE_DT,S.CreatedDate) <= 2 /*Business Days*/ 
     --DATEDIFF(DD,A.ALERTS_CREATE_DT,S.CreatedDate) + 1 
     ---(DATEDIFF(WK,A.ALERTS_CREATE_DT,S.CreatedDate) * 2) 
     ---(CASE WHEN DATENAME(DW,A.ALERTS_CREATE_DT) = 'SUNDAY' THEN 1 ELSE 0 END) 
     ---(CASE WHEN DATENAME(DW,S.CreatedDate) = 'SATURADAY' THEN 1 ELSE 0 END) 
       ) 

    THEN 'Y' 
    WHEN A.ALERT_DESC = 'model' OR S.CreatedDate IS NULL OR S.Name = 'ER' 
    THEN '' 
    ELSE 'N' 
     END 'Count towards Alerts' 

FROM A 
FULL S ON A.id= S.id 

WHERE 1=1 
+0

是否需要添加任何信息? – John

回答

0

這應該通過排除星期六和星期日給你所需的結果。

SELECT A.ALERT_DESC,A.ALERTS_CREATE_DT,S.Name,S.CreatedDate, 
    CASE WHEN 
     S.Name IN ('Assessment','Survey') AND A.ALERT_DESC = 'ER'  
     AND CAST(A.ALERTS_CREATE_DT AS DATE) <= CAST(S.CreatedDate AS DATE) 
     AND 
     ((DATEDIFF(DD,A.ALERTS_CREATE_DT,S.CreatedDate)+1 
     - (datediff(wk,A.ALERTS_CREATE_DT,S.CreatedDate)*2) 
     - case when datepart(dw,A.ALERTS_CREATE_DT)=1 then 1 else 0 end 
     - case when datepart(dw,S.CreatedDate)=7 then 1 else 0 end 
     )) <=2 THEN 'Y' 
     WHEN A.ALERT_DESC = 'model' OR S.CreatedDate IS NULL OR S.Name = 'ER' THEN '' 
     ELSE 'N' END 'Count towards Alerts' 
FROM A,S 
+0

如何將其嵌入到我的查詢中。這就是我掙扎的地方。 – John

+0

你可以分享你的表格結構嗎?我會嘗試相應地編寫查詢。 –

+0

@John,我編輯了我的答案完整的查詢。它爲我工作了一些樣本記錄。你可以檢查。 –