Сумма, если дата существует для этого месяца

#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. Спасибо за объяснение, это имеет смысл, очень ценится.