[英]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個新列,即SOFReleaseDateName
和SOFReleaseDateValue
。
我需要更改現有語句以說,當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.