Reputation: 2274
I have a logic in a query for a report that determines the number of days passed, excluding weekends. There are 2 possible start dates - the original receipt date or the date of a re-submit (if it exists). I am able to correctly calculate this using the following CASE
statement
CASE WHEN [ResubmitReceivedDate] IS NULL THEN
(SELECT
(DATEDIFF(dd, [OriginalReceivedDate] , [AnalysisDate]) + 1)
-(DATEDIFF(wk,[OriginalReceivedDate] , [AnalysisDate]) * 2)
-(CASE WHEN DATENAME(dw, [OriginalReceivedDate] ) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(dw, [AnalysisDate]) = 'Saturday' THEN 1 ELSE 0 END)
)
ELSE
(SELECT
(DATEDIFF(dd, [ResubmitReceivedDate], [AnalysisDate]) + 1)
-(DATEDIFF(wk, [ResubmitReceivedDate], [AnalysisDate]) * 2)
-(CASE WHEN DATENAME(dw, [ResubmitReceivedDate]) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(dw, [AnalysisDate]) = 'Saturday' THEN 1 ELSE 0 END)
)
However, there are some instances when the [AnalysisDate]
comes before the [ResubmitReceivedDate]
, and in these instances, the [OriginalReceivedDate]
should still be used even though a [ResubmitReceivedDate]
exists.
How can I add this logic to the above CASE
statement?
Upvotes: 0
Views: 180
Reputation: 785
Seems like the simplest solution would just be to add another When
condition. Something like this:
WHEN DateDiff(day, [ResubmitReceivedDate], [AnalysisDate]) > -1 THEN
(Select
(DATEDIFF(day, [OriginalReceivedDate] , [AnalysisDate]) + 1)
-(DATEDIFF(week,[OriginalReceivedDate] , [AnalysisDate]) * 2)
-(CASE WHEN DATENAME(weekday, [OriginalReceivedDate] ) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(weekday, [AnalysisDate]) = 'Saturday' THEN 1 ELSE 0 END)
)
Which would make your final case
Case
WHEN [ResubmitReceivedDate] IS NULL THEN
(Select
(DATEDIFF(day, [OriginalReceivedDate] , [AnalysisDate]) + 1)
-(DATEDIFF(week,[OriginalReceivedDate] , [AnalysisDate]) * 2)
-(CASE WHEN DATENAME(weekday, [OriginalReceivedDate] ) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(weekday, [AnalysisDate]) = 'Saturday' THEN 1 ELSE 0 END)
)
WHEN DateDiff(day, [ResubmitReceivedDate], [AnalysisDate]) < -1 THEN
(Select
(DATEDIFF(day, [OriginalReceivedDate] , [AnalysisDate]) + 1)
-(DATEDIFF(week,[OriginalReceivedDate] , [AnalysisDate]) * 2)
-(CASE WHEN DATENAME(weekday, [OriginalReceivedDate] ) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(weekday, [AnalysisDate]) = 'Saturday' THEN 1 ELSE 0 END)
)
Else
(SELECT
(DATEDIFF(day, [ResubmitReceivedDate], [AnalysisDate]) + 1)
-(DATEDIFF(week, [ResubmitReceivedDate], [AnalysisDate]) * 2)
-(CASE WHEN DATENAME(weekday, [ResubmitReceivedDate]) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(weekday, [AnalysisDate]) = 'Saturday' THEN 1 ELSE 0 END)
)
End
Upvotes: 1