SQL-SERVER - ошибка CASE - не работает CASE в конкретном источнике - PullRequest
0 голосов
/ 12 июня 2018

Я работаю над запросом, где я хочу получить среднюю температуру за целый месяц, но у меня есть проблема.Когда начинается новый год, Месяц равен 1, и я не могу использовать команду:

MONTH(TimestampUTC) = MONTH(DATEADD(MONTH, -1, GETDATE()))

Поскольку месяц 1 минус 1 - это месяц 0.

Поэтому я не хочу использоватьВыражение case, чтобы заставить мой код работать.

Когда я запускаю запрос ниже, я получаю следующую ошибку:

Сообщение 156, Уровень 15, Состояние 1, Строка 6

Неверный синтаксис рядом с ключевым словом «CASE».

Конечно, я хочу, чтобы следующий запрос работал.Кто-нибудь может мне помочь?

SELECT AVG(Value) AS AVG_temp 
FROM(

SELECT Value, TimestampUTC  
WHERE SourceName = 'Buitentemperatuur' 
CASE 
    WHEN MONTH(TimestampUTC) = 1 
    THEN MONTH(TimestampUTC) = MONTH(DATEADD(MONTH, +11, GETDATE()))
        and YEAR(TimestampUTC) = YEAR(DATEADD(YEAR, -1, GETDATE()))
    ELSE
        MONTH(TimestampUTC) = MONTH(DATEADD(MONTH, -1, GETDATE()))
        and YEAR(TimestampUTC) = YEAR(DATEADD(YEAR, 0, GETDATE()))
END 
FROM vDataLogChannelValue
) x

Программа, в которой я работаю, - Microsoft SQL Server Management Studio 2014. Я уже провел несколько тестов UNIT для других частей кода.Когда я добавляю CASE, ошибка становится активной, и код больше не работает.

ОБНОВЛЕНИЕ:

Спасибо за отзыв, он работает сейчас, но теперь у меня есть следующее предупреждение, которое не имеет смысла для меня, потому что оно работало, когда я проверял его, когда это не былоt в этом запросе:

Msg 102, уровень 15, состояние 1, строка 8

Неверный синтаксис рядом с '='.

Это примерноследующая строка:

THEN MONTH(TimestampUTC) = MONTH(DATEADD(MONTH, +11, GETDATE()))

1 Ответ

0 голосов
/ 12 июня 2018

Вы должны будете иметь ключевое слово AND после первого предложения WHERE.И тогда вам нужно будет создать еще одно предложение WHERE, в котором будет использоваться оператор CASE.Кроме того, теперь в предложениях THEN должны быть назначения.

Вот пример того, что может работать с точки зрения синтаксиса:

SELECT Value, TimestampUTC  
WHERE SourceName = 'Buitentemperatuur' AND SomethingElse =
CASE 
    WHEN MONTH(TimestampUTC) = 1 
    THEN 123
    ELSE
        234
END 
FROM vDataLogChannelValue
) x
...