У вас странная конструкция, потому что одна ветвь case
возвращает строку, а другая - число.В таком случае SQL Server решает, что выражение возвращает число.
И у вас будут проблемы с ELSE
, потому что нечисловая строка будет преобразована в число.Ошибка.
Следующие могут работать:
(CASE WHEN CodeValue in ('Numeric1', 'Numeric2')
THEN CAST(VARCHAR(MAX), SUM(CAST(VarcharValue as int)))
ELSE MAX(VarcharValue)
END)
У вас все еще может быть проблема, если SUM()
вычисляется по всем данным перед фильтрацией (чтоЯ думаю, что это возможно с запросом агрегации).Я рекомендую обновить до поддерживаемой версии SQL Server и использовать:
(CASE WHEN CodeValue in ('Numeric1', 'Numeric2')
THEN CAST(VARCHAR(MAX), SUM(TRY_CAST(VarcharValue as int)))
ELSE MAX(VarcharValue)
END)
Однако вы можете повторить логику CASE
:
(CASE WHEN CodeValue in ('Numeric1', 'Numeric2')
THEN CAST(VARCHAR(MAX), SUM(CASE WHEN CodeValue in ('Numeric1', 'Numeric2') THEN CAST(VarcharValue as int) END))
ELSE MAX(VarcharValue)
END)