簡體   English   中英

復雜的CASE表達式代碼

[英]Complex CASE Expression Code

我有一個現有的案情陳述需要修改,這給我帶來了麻煩。 現有代碼:

CASE WHEN (DATEDIFF(Day, MAX(ContDataTranDate), ContDataEnd) + 1)
-(DATEDIFF(wk, MAX(ContDataTranDate), ContDataEnd) * 2)  
-(CASE WHEN DATENAME(dw, MAX(ContDataTranDate)) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(dw, ContDataEnd) = 'Saturday' THEN 1 ELSE 0 END) -1  = 1 THEN 1 ELSE 0 END [Shipped1Day]   

我需要補充的是:
我有2個新列,即SOFReleaseDateNameSOFReleaseDateValue
我需要更改現有語句以說,當SOFReleaseDateName不為null時,在當前使用ContDataTranDate ELSE的計算中使用SOFReleaseDateValue而不是ContDataTranDate ,請使用ContDataTranDate 我嘗試了許多不同的方法。
SOFReleaseDateValue也是一個日期。

只需在檢查SOFReleaseDateName的語句前面添加新的case語句即可

CASE WHEN SOFReleaseDateName IS NOT NULL THEN
   CASE WHEN (DATEDIFF(Day, MAX(SOFReleaseDateValue ), ContDataEnd) + 1)
            -(DATEDIFF(wk, MAX(SOFReleaseDateValue ), ContDataEnd) * 2)  
            -(CASE WHEN DATENAME(dw, MAX(SOFReleaseDateValue )) = 'Sunday' THEN 1 ELSE 0 END)
            -(CASE WHEN DATENAME(dw, ContDataEnd) = 'Saturday' THEN 1 ELSE 0 END) -1  = 1 
        THEN 1 
        ELSE 0
    END
WHEN
    (DATEDIFF(Day, MAX(ContDataTranDate), ContDataEnd) + 1)
    -(DATEDIFF(wk, MAX(ContDataTranDate), ContDataEnd) * 2)  
    -(CASE WHEN DATENAME(dw, MAX(ContDataTranDate)) = 'Sunday' THEN 1 ELSE 0 END)
    -(CASE WHEN DATENAME(dw, ContDataEnd) = 'Saturday' THEN 1 ELSE 0 END) -1  = 1 

    THEN 1 
    ELSE 0 
END [Shipped1Day] 

SOFReleaseDateName IS NOT NULL情況下,您可能需要ELSE而不是WHEN

CASE WHEN SOFReleaseDateName IS NOT NULL THEN
    CASE WHEN (DATEDIFF(Day, MAX(SOFReleaseDateValue ), ContDataEnd) + 1)
            -(DATEDIFF(wk, MAX(SOFReleaseDateValue ), ContDataEnd) * 2)  
            -(CASE WHEN DATENAME(dw, MAX(SOFReleaseDateValue )) = 'Sunday' THEN 1 ELSE 0 END)
            -(CASE WHEN DATENAME(dw, ContDataEnd) = 'Saturday' THEN 1 ELSE 0 END) -1  = 1 
        THEN 1 
        ELSE 0
    END
ELSE
     CASE WHEN (DATEDIFF(Day, MAX(ContDataTranDate), ContDataEnd) + 1)
            -(DATEDIFF(wk, MAX(ContDataTranDate), ContDataEnd) * 2)  
            -(CASE WHEN DATENAME(dw, MAX(ContDataTranDate)) = 'Sunday' THEN 1 ELSE 0 END)
            -(CASE WHEN DATENAME(dw, ContDataEnd) = 'Saturday' THEN 1 ELSE 0 END) -1  = 1 
        THEN 1 
        ELSE 0 
    END
END [Shipped1Day]  
CASE WHEN (DATEDIFF(Day, MAX(case when SOFReleaseDateName is not null then SOFReleaseDateValue else ContDataTranDate end), ContDataEnd) + 1)
-(DATEDIFF(wk, MAX(case when SOFReleaseDateName is not null then SOFReleaseDateValue else ContDataTranDate end), ContDataEnd) * 2)  
-(CASE WHEN DATENAME(dw, MAX(case when SOFReleaseDateName is not null then SOFReleaseDateValue else ContDataTranDate end)) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(dw, ContDataEnd) = 'Saturday' THEN 1 ELSE 0 END) -1  = 1 THEN 1 ELSE 0 END [Shipped1Day]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM