简体   繁体   English

SQL错误(102):“>”附近的语法不正确

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

I am having some real trouble with this CASE statement... It says I get an error near > which seems to point to the 3rd line where its checking > 15. However I don't see anything wrong with this query. 我在使用CASE语句时遇到了一些真正的麻烦...它说我在>附近出现错误,该错误似乎指向其检查> 15的第三行。但是,此查询没有发现任何错误。

I tried searching around on google and here and didn't see anyone with this exact problem, hopefully you can point it out. 我尝试在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

Thanks in advance! 提前致谢!

Your problem lies in the CASE expression. 您的问题出在CASE表达式中。 When using multiple conditions, you use WHEN instead of ELSE . 使用多个条件时,请使用WHEN而不是ELSE ELSE should only be used once. 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'...

You've got the syntax wrong; 您的语法有误; you can't use multiple ELSE clauses - it should be multiple WHENs: 您不能使用多个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'

See the documentation for more information and examples. 请参阅文档以获取更多信息和示例。

I believe it is your formatting of the CASE statement, I put your query is SSMS and fixed it this way, and it passes validation: 我相信这是您对CASE语句的格式,我将您的查询设置为SSMS并通过这种方式进行了修复,并通过了验证:

you can only use 1 ELSE clause per CASE statement 每个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.

相关问题 SQL Server 错误 102 “附近的语法不正确” - SQL Server Error 102 Incorrect Syntax near " SQL错误(102):“ =”附近的语法不正确 - SQL Error (102): incorrect syntax near “=” &#39;;&#39; 附近的语法不正确 (Microsoft SQL Server 错误 102) - Incorrect Syntax near ';' (Microsoft SQL Server Error 102) SQLSTATE 42000(错误102)&#39;)附近的语法不正确 - SQLSTATE 42000 (Error 102) Incorrect syntax near ')' pyodbc &#39;-&#39; 附近的语法不正确。 (102) - pyodbc Incorrect syntax near '-'. (102) SQL 服务器作业 - “订单”附近的语法不正确。 [SQLSTATE 42000](错误 102) - SQL Server Job - Incorrect syntax near 'order'. [SQLSTATE 42000] (Error 102) 消息 102,级别 15,State 1,第 8 行 '-' 附近的语法不正确,授予视图 SQL 服务器错误 - Msg 102, Level 15, State 1, Line 8 Incorrect syntax near '-' , Grant View SQL Server error SQL Job运行一些select语句&#39;\\&#39;附近的语法不正确。 [SQLSTATE 42000](错误102) - SQL Job running a few select statements Incorrect syntax near '\'. [SQLSTATE 42000] (Error 102) T-SQL 作业失败,“ ”附近的语法不正确。 [SQLSTATE 42000](错误 102) - T-SQL Job fail with Incorrect syntax near ' '. [SQLSTATE 42000] (Error 102) SQL查询抛出此错误Msg 102,级别15,状态1,行1&#39;&#39;附近的语法不正确 - SQL query is throwing this error Msg 102, Level 15, State 1, Line 1 Incorrect syntax near ' '
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM