3

我正在尝试运行这个简单的查询,但它甚至没有解析说

Msg 156, Level 15, State 1, Line 2 关键字“between”附近的语法不正确。

查询是:

select  
    case DMProject.dbo.TypeFourTraining.Column2 
    when Column2 between 181 and 360 then '181-360' 
    when Column2 between 0 and 180 then '0-180' 
END as score 
from DMProject.dbo.TypeFourTraining 

这同样不适用于Column2 < 360语法..

我已经从 msdn 和其他一些网站通过 Internet 进行了搜索,但我发现我的语法似乎是有效的,然后要么有一个我需要知道的细节,要么有一些我看不到的东西 :(

任何人都可以提出解决方案吗?

4

2 回答 2

4

您不能混合 CASE 表达式的simplesearched类型。删除DMProject.dbo.TypeFourTraining.Column2CASE 后指定的字段名称。

查询的正确语法:

SELECT  CASE 
            WHEN Column2 between 181    AND 360 THEN '181-360' 
            WHEN Column2 between 0      AND 180 THEN '0-180' 
        END as score 
FROM    DMProject.dbo.TypeFourTraining 

两种类型的 CASE 表达式:

CASE 表达式有两种类型,即SimpleSearched。您不能将SimpleSearched组合在同一个表达式中。

简单案例:

CASE input
    WHEN 1 THEN 'a'
    WHEN 2 THEN 'b'
    WHEN 3 THEN 'c'
    ELSE ''
END

用简单的例子搜索CASE:

CASE 
    WHEN input = 1 THEN 'a'
    WHEN input = 2 THEN 'b'
    WHEN input = 3 THEN 'c'
    ELSE ''
END

用稍微复杂的例子搜索 CASE:

这涉及多个列。您可以在每个 WHEN 语句中添加多个列。

CASE 
    WHEN input = 1 AND second_column = 2 THEN 'a'
    WHEN input = 2 AND third_column  = 3 THEN 'b'
    WHEN input = 3 AND (second_column = 4 OR third_column = 6) THEN 'c'
    ELSE ''
END
于 2012-05-05T18:34:52.737 回答
3

您正在混淆案例陈述的两种形式。尝试这个:

select (case when Column2 between 181 and 360 then '181-360' 
             when Column2 between 0 and 180 then '0-180' 
        END) as score 
from DMProject.dbo.TypeFourTraining 

另一种形式将用于单例值:

select  case DMProject.dbo.TypeFourTraining.Column2 
            when 1 then '1' 
            when 2 then '2'
            etc. etc. etc. 
            END as score 
from DMProject.dbo.TypeFourTraining 
于 2012-05-05T18:34:09.200 回答