簡體   English   中英

SQL錯誤(102):“>”附近的語法不正確

[英]SQL Error (102): Incorrect syntax near '>'

我在使用CASE語句時遇到了一些真正的麻煩...它說我在>附近出現錯誤,該錯誤似乎指向其檢查> 15的第三行。但是,此查詢沒有發現任何錯誤。

我嘗試在Google和此處進行搜索,但是沒有人遇到這個確切的問題,希望您能指出來。

SELECT 
CASE 
    WHEN DATEDIFF(day, C1.RecvdDate, GETDATE()) > 15 AND DATEDIFF(day, C1.RecvdDate, GETDATE()) <= 30 THEN '15+'
    ELSE DATEDIFF(day, C1.RecvdDate, GETDATE()) > 30 AND DATEDIFF(day, C1.RecvdDate, GETDATE()) <= 60 THEN '30+'
    ELSE DATEDIFF(day, C1.RecvdDate, GETDATE()) > 60 AND DATEDIFF(day, C1.RecvdDate, GETDATE()) <= 90 THEN '60+'
    ELSE DATEDIFF(day, C1.RecvdDate, GETDATE()) > 90 AND DATEDIFF(day, C1.RecvdDate, GETDATE()) <= 120 THEN '90+'
    ELSE '120+'
END AS 'Days', 
C1.CallID AS 'Ticket#', A1.WhoAcknow AS 'Acknowledged By', C1.RecvdDate AS 'Received On', C1.Category, COUNT(*) As Assignments 

FROM [HEAT].[heat].[CallLog] C1 
LEFT JOIN [HEAT].[heat].[Asgnmnt] A1 ON C1.CallID = A1.CallID 
WHERE DATEDIFF(day, C1.RecvdDate, GETDATE()) > 15 AND C1.CallStatus = 'Open' AND C1.Category <> 'welfare' AND C1.CustType <> 'IFS' AND 
A1.Resolution = '' AND (A1.GroupName = 'Help Desk' AND A1.Assignee = 'EITS PIV Badge') 
GROUP BY C1.CallID, A1.WhoAcknow, C1.RecvdDate, C1.Category 
ORDER BY C1.RecvdDate ASC

提前致謝!

您的問題出在CASE表達式中。 使用多個條件時,請使用WHEN而不是ELSE ELSE只能使用一次。

SELECT 
CASE 
    WHEN DATEDIFF(day, C1.RecvdDate, GETDATE()) > 15 AND DATEDIFF(day, C1.RecvdDate, GETDATE()) <= 30 THEN '15+'
    WHEN DATEDIFF(day, C1.RecvdDate, GETDATE()) > 30 AND DATEDIFF(day, C1.RecvdDate, GETDATE()) <= 60 THEN '30+'
    WHEN DATEDIFF(day, C1.RecvdDate, GETDATE()) > 60 AND DATEDIFF(day, C1.RecvdDate, GETDATE()) <= 90 THEN '60+'
    WHEN DATEDIFF(day, C1.RecvdDate, GETDATE()) > 90 AND DATEDIFF(day, C1.RecvdDate, GETDATE()) <= 120 THEN '90+'
    ELSE '120+'
END AS 'Days'...

您的語法有誤; 您不能使用多個ELSE子句-應該是多個WHEN:

SELECT 
CASE 
    WHEN DATEDIFF(day, C1.RecvdDate, GETDATE()) > 15 AND DATEDIFF(day, C1.RecvdDate, GETDATE()) <= 30 THEN '15+'
    WHEN DATEDIFF(day, C1.RecvdDate, GETDATE()) > 30 AND DATEDIFF(day, C1.RecvdDate, GETDATE()) <= 60 THEN '30+'
    WHEN DATEDIFF(day, C1.RecvdDate, GETDATE()) > 60 AND DATEDIFF(day, C1.RecvdDate, GETDATE()) <= 90 THEN '60+'
    WHEN DATEDIFF(day, C1.RecvdDate, GETDATE()) > 90 AND DATEDIFF(day, C1.RecvdDate, GETDATE()) <= 120 THEN '90+'
    ELSE '120+'
END AS 'Days'

請參閱文檔以獲取更多信息和示例。

我相信這是您對CASE語句的格式,我將您的查詢設置為SSMS並通過這種方式進行了修復,並通過了驗證:

每個CASE語句只能使用1個ELSE子句

SELECT 
    CASE 
        WHEN DATEDIFF(day, C1.RecvdDate, GETDATE()) > 15 AND DATEDIFF(day, C1.RecvdDate, GETDATE()) <= 30 THEN '15+'
        WHEN DATEDIFF(day, C1.RecvdDate, GETDATE()) > 30 AND DATEDIFF(day, C1.RecvdDate, GETDATE()) <= 60 THEN '30+'
        WHEN DATEDIFF(day, C1.RecvdDate, GETDATE()) > 60 AND DATEDIFF(day, C1.RecvdDate, GETDATE()) <= 90 THEN '60+'
        WHEN DATEDIFF(day, C1.RecvdDate, GETDATE()) > 90 AND DATEDIFF(day, C1.RecvdDate, GETDATE()) <= 120 THEN '90+'
        ELSE '120+'
    END AS 'Days', 
    C1.CallID AS 'Ticket#', A1.WhoAcknow AS 'Acknowledged By', C1.RecvdDate AS 'Received On', C1.Category, COUNT(*) As Assignments 

    FROM [HEAT].[heat].[CallLog] C1 
    LEFT JOIN [HEAT].[heat].[Asgnmnt] A1 ON C1.CallID = A1.CallID 
    WHERE DATEDIFF(day, C1.RecvdDate, GETDATE()) > 15 AND C1.CallStatus = 'Open' AND C1.Category <> 'welfare' AND C1.CustType <> 'IFS' AND 
    A1.Resolution = '' AND (A1.GroupName = 'Help Desk' AND A1.Assignee = 'EITS PIV Badge') 
    GROUP BY C1.CallID, A1.WhoAcknow, C1.RecvdDate, C1.Category 
    ORDER BY C1.RecvdDate ASC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM