Вы заявляете о производительности, однако, не зная полной картины, довольно сложно понять, как оптимизировать запрос.
Пока я работал над этим, я заметил ответ Гордона Линоффа, однако я также продолжу писать свою версию, мы оба идем по одному и тому же пути, но получим ответ немного по-другому.
WITH DateData (date, datetoapply)
AS
(
SELECT
[date],
CASE DATEPART(w, [date])
WHEN 5 THEN DATEADD(d, 2, [date])
WHEN 6 THEN DATEADD(d, 1, [date])
ELSE date
END as 'datetoapply'
FROM inflow
WHERE [date] >= dateadd(year, -2, getdate())
)
SELECT datetoapply, count(*)
FROM DateData
GROUP BY datetoapply
ORDER BY datetoapply
Хотя я не смог заставить запрос Гордона работать должным образом, я могу подтвердить, что «DATEPART (w, [date])» работает намного лучше, чем «DATENAME (weekday, [date])», который при замене в запросе выше увеличивает время обработки сервера с 87 мс до 181 мс на основе таблицы, заполненной 10 000 строками в Azure.