Я пытаюсь создать оператор, который будет извлекать некоторую статистику из базы данных.
Я пытаюсь использовать оператор SUM case для получения количества записей, у которых есть дата соединения между началом и концом предыдущего года, однако я продолжаю получать сообщение об ошибке:
Сообщение 156, уровень 15, состояние 1, строка 22
Неверный синтаксис рядом с ключевым словом "BETWEEN"
SELECT
P.ProductName
,SUM(case M.IsActive when 1 then 1 else 0 end) ACTIVE
,SUM(case M.IsActive when 0 then 1 else 0 end) INACTIVE
,SUM(case m.joindate WHEN m.joindate BETWEEN DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) - 1, 0) AND DATEADD(dd, -1, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0)) THEN 1 ELSE 0) AS '2018'
FROM
table1 M
LEFT JOIN
table2 P ON P.ProductID = M.ProductID
GROUP BY
P.ProductName
Я просмотрел ошибку в Интернете, и было рекомендовано попытаться удалить m.joindate, чтобы это было SUM (Случай WHEN, но это тоже не сработало и выдало такое же сообщение.
Кто-нибудь знает, почему появляется это сообщение? Это то, что вы не можете использовать BETWEEN в заявлении case, или я написал это неправильно?
заранее спасибо
BETWEEN
при использовании синтаксисаCASE {expression} WHEN...
Вам необходимо использоватьCASE WHEN {boolean Expression}
. При использовании форматаCASE {expression} WHEN {Value}
WHEN
должно быть скалярным выражением. Т.е.CASE YourColumn WHEN 1 THEN ... WHEN 2 THEN...
Кроме того, в том жеCASE
выражении отсутствуетEND
. - person Larnu   schedule 12.08.2019