#sql #sum #int #case #converter
#sql #сумма #int #случай #конвертеры
Вопрос:
Я пытаюсь вычислить запрошенную сумму для всех завершенных обращений за этот месяц. Я использую SQL 2008
Если в столбце DateCompleted за этот месяц есть дата, то дайте мне сумму AmountRequested для этих столбцов, вот мой код, он продолжает падать, говоря «Столкновение типов операндов: дата несовместима с int»
SUM(case WHEN CONVERT(DATE,pm.DateCompleted,103)
= MONTH(GETDATE()) AND YEAR(pm.DateCompleted) = YEAR(GETDATE())
THEN pm.AmountRequested
ELSE 0 end) AS [LoanAmount]
Ответ №1:
CONVERT(DATE,pm.DateCompleted,103) = MONTH(GETDATE())
Здесь вы пытаетесь сравнить date
с integer
ошибкой so.
Например.
CONVERT(DATE,pm.DateCompleted,103)
может вернуться '2016-10-11'
и MONTH(GETDATE())
вернется 10
. Вы пытаетесь приравнять '2016-10-11' = 10
, поэтому генерируется ошибка
Почему бы не использовать ту же MONTH
функцию и для вашего столбца
Sum(CASE
WHEN Month(pm.DateCompleted) = Month(Getdate())
AND Year(pm.DateCompleted) = Year(Getdate()) THEN pm.AmountRequested
ELSE 0
END) AS [LoanAmount]
Комментарии:
1. Отлично, спасибо Prdp, так что преобразование вызвало проблему.
2. @RustyHamster Да, вы пытаетесь сравнить
date
сinteger
тем, что является реальной проблемой. Например.CONVERT(DATE,pm.DateCompleted,103)
может вернуть'2016-10-11'
иMONTH(GETDATE())
вернет10
вас, пытаясь приравнять'2016-10-11' = 10
, поэтому генерируется ошибка3. Спасибо за объяснение, это имеет смысл, очень ценится.