2013-08-28 107 views
0

我真的在MSSQL 2012中遇到了一个case语句。我已经四处寻找其他答案,但尽管我有一些帮助,但似乎没有解决问题。带有聚合和类似子句的case语句 - MSSQL 2012

case firstname 
    when len(ltrim(rtrim(firstname))) > 11 then 'blah' 
    else 'blahblah' 
end as test 

我得到一个语法错误,'>'字符。

原来,这是

case firstname 
    when ltrim(rtrim(firstname)) like '% %' then 'blah' 
    else 'blahblah' 
end as test 

,但我认为有可能已经对类似的关键字一定的敏感性,所以我把它改为“>”,但我得到了同样的事情。

可能是一个愚蠢的问题,但我已经撞了我的头几个小时,一些见解将不胜感激。

回答

2

试试这个版本:

(case when len(ltrim(rtrim(firstname))) > 11 then 'blah' 
     else 'blahblah' 
end) as test 

case说法有两个版本。与该变量的一个用于常量表达式:

(case firstname 
     when 'Arnold' then . . . 
     when 'Betty' then . . . 
end) 

第二个版本(这是真的是唯一一个I使用)取条件为每个部分:

(case when firstname = 'Arnold' then . . . 
+0

啊,辉煌!这样可行。非常感谢你! –

+0

很快就会接受。 –

0

Chnage它

case 
    when len(ltrim(rtrim(firstname))) > 11 then 'blah' 
    else 'blahblah' 
end as test 
0

你在混合使用CASE expressions这两种形式。

一个简单的表达式检查每个WHEN子句与CASE之后和第一个WHEN之前的表达式是否相等。

搜索的案例表达式检查每个WHEN子句中的单独任意谓词,并且没有CASE和第一个WHEN之间的表达式。

尝试:

case 
    when len(ltrim(rtrim(firstname))) > 11 then 'blah' 
    else 'blahblah' 
end as test