Clause WHERE SQL Server utilisant des colonnes temporaires

J'ai la requête suivante, qui utilise une instruction CASE. Est-il de toute façon à append dans la clause where WHERE IsBusinessDayFinal = 0? sans utiliser une table temporaire?

Merci beaucoup!

SELECT ac.DateTimeValue, CASE WHEN pc.IsBusinessDay IS NOT NULL THEN pc.IsBusinessDay ELSE ac.IsBusinessDay END AS IsBusinessDayFinal, ac.FullYear, ac.MonthValue, ac.DayOfMonth, ac.DayOfWeek, ac.Week FROM [dbo].[AdminCalendar] ac LEFT JOIN [dbo].ProjectCalendar pc ON ac.DateTimeValue = pc.DateTimeValue AND pc.ProjectId = @projectId WHERE ac.DateTimeValue >= @startDate AND ac.DateTimeValue <= @finishDate; 

Utilisation

 WHERE (pc.IsBusinessDay IS NULL AND ac.IsBusinessDay = 0) OR pc.IsBusinessDay = 0 
 WHERE ac.DateTimeValue >= @startDate AND ac.DateTimeValue <= @finishDate AND ((pc.IsBusinessDay IS NOT NULL AND pc.IsBusinessDay = 0) OR ac.IsBusinessDay = 0) 

Vous pouvez utiliser COALESCE au lieu de CAS parce que vous vérifiez null:

 SELECT ac.DateTimeValue, COALESCE(pc.IsBusinessDay, ac.IsBusinessDay) AS IsBusinessDayFinal, ac.FullYear, ac.MonthValue, ac.DayOfMonth, ac.DayOfWeek, ac.Week FROM [dbo].[AdminCalendar] ac LEFT JOIN [dbo].ProjectCalendar pc ON ac.DateTimeValue = pc.DateTimeValue AND pc.ProjectId = @projectId WHERE ac.DateTimeValue >= @startDate AND ac.DateTimeValue <= @finishDate AND COALESCE(pc.IsBusinessDay, ac.IsBusinessDay) = 0