2014-11-10 1 views
0

почему мой сазе выдает эту ошибку:Почему мой оператор case выдает ошибку, неправильный синтаксис рядом с '='?

Msg 102, Level 15, State 1, Line 2 Неправильный синтаксис около '='.

Код:

Create PROCEDURE [dbo].[Chart_SelectSmsComplaintsValidity] 

@FromDate datetime, 
@ToDate datetime 

AS 
BEGIN 

    Select COUNT(ReceivedMessages.ID) As ReceivedMessageID, 
    CASE ReceivedMessages.IsComplaint WHEN ReceivedMessages.IsComplaint=0 
    THEN 'Incomplete' 
    WHEN ReceivedMessages.IsComplaint=1 THEN 'Complete' 
    WHEN ReceivedMessages.IsComplaint=-3 THEN 'Inappropriate' END from ReceivedMessages 

    where ReceivedMessages.ReceivedDateTime >= @FromDate AND ReceivedMessages.ReceivedDateTime <= @ToDate 
    Group By ReceivedMessages.IsComplaint 




END 
+0

Это потому, что вы используете 'СЛУЧАЙ ColumnName КОГДА columnvalue' форму вместо 'CASE WHEN выражение THEN возвращает WHEN выражение THEN return' формы' CASE'. Просто перечислите значение '1', а не полное выражение типа' IsCompliant = 1' –

ответ

1

Ошибка в этой строке

CASE ReceivedMessages.IsComplaint WHEN ReceivedMessages.IsComplaint=0 

это должно быть, как это

CASE WHEN ReceivedMessages.IsComplaint=0 THEN 'Incomplete' 
WHEN ReceivedMessages.IsComplaint=1 THEN 'Complete' 
WHEN ReceivedMessages.IsComplaint=-3 THEN 'Inappropriate' END 
2

Вы совмещая две различные формы из CASE заявление. Вы можете упростить это так, так как вы сравниваете то же самое выражение в каждом случае:

CASE ReceivedMessages.IsComplaint 
    WHEN 0 THEN 'Incomplete' 
    WHEN 1 THEN 'Complete' 
    WHEN -3 THEN 'Inappropriate' 
END from ReceivedMessages 

Альтернативой будет:

CASE 
    WHEN ReceivedMessages.IsComplaint=0 THEN 'Incomplete' 
    WHEN ReceivedMessages.IsComplaint=1 THEN 'Complete' 
    WHEN ReceivedMessages.IsComplaint=-3 THEN 'Inappropriate' 
END 
Смежные вопросы