【问题标题】:Why my case statement throws error , incorrect syntax near '='?为什么我的case语句抛出错误,'='附近的语法不正确?
【发布时间】:2014-11-11 04:02:30
【问题描述】:

为什么我的case语句会抛出这个错误:

消息 102,第 15 级,状态 1,第 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

【问题讨论】:

  • 这是因为您使用的是CASE columnname WHEN columnvalue 形式而不是CASE WHEN expression THEN return WHEN expression THEN return 形式的CASE。只需列出值 1 ,而不是像 IsCompliant=1 这样的完整表达式

标签: sql sql-server tsql


【解决方案1】:

您正在组合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

【讨论】:

    【解决方案2】:

    错误在这一行

    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
    

    【讨论】:

      猜你喜欢
      • 2011-10-27
      • 2014-07-15
      • 2015-07-27
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多