Я хочу, чтобы лучше понять, что происходит за кулисами, в следующем запросе:Каким образом второе утверждение СЛУЧАЙ влияет на производительность
SELECT s.Question_Id, s.Question,
CASE WHEN
(SUM(CASE WHEN sr.Answer = 1 THEN 1 WHEN sr.Answer = 0 THEN 0 ELSE NULL END)
) IS NULL THEN 'N/A'
ELSE CAST(SUM(CASE WHEN sr.Answer = 1 THEN 1 WHEN sr.Answer = 0 THEN 0 ELSE NULL END) AS VARCHAR) END
AS Answered_Yes
FROM SurveyResult sr
INNER JOIN Survey s
ON sr.Question_Id = s.Question_Id
GROUP BY s.Question_Id, s.Question
Просто, чтобы лучше понять запрос, он возвращает результаты обследований с суммой «Да» ответы.
Примечание: Я делаю CAST
потому что CASE
оператор может возвращать только один тип данных, и вместо того, чтобы вернуться NULL, я хочу вернуть N/A. Так что мой вопрос делает эту линию (в ELSE
):
CASE WHEN sr.Answer = 1 THEN 1 WHEN sr.Answer = 0 THEN 0 ELSE NULL END
реально работать в два раза? В соответствии с планом выполнения у него есть дополнительная вычислительная скалярная операция, но использует ли она кеш, потому что только что сделана такая же проверка при первой проверке инструкции WHEN
?
Надеюсь, что мои вопросы будут ясными, так как раньше у меня был этот сценарий и я хотел узнать о последствиях выполнения запроса.
Не совсем. Эта строка: 'SUM (CASE WHEN sr.Answer = 1 THEN 1 WHEN sr.Answer = 0 THEN 0 ELSE NULL END)'. Я не думаю, что SQL Server достаточно умен, чтобы оптимизировать это, хотя я могу ошибаться. –
Отметьте кастинг в varchar без указания длины (будет varchar (1)) –