2014-03-18 79 views
0

我想获得这种情况下,当语句在SQL Server 2008 R2中工作。在CHARINDEX声明部分的情况下,它总是说'>'符号无效。SQL Server案例当charindex

select 
    count(r.id) as request, 
    case r.servicelayer 
     when null then r.topic + '/IAL' 
     when '' then r.topic + '/IAL' 
     when CHARINDEX('/rssfeed1234/georss/SomMobile', i.URI_STEM) ***>*** 0 then 'Som Mobile' 
     else r.topic + '/' + r.servicelayer 
    end as [layername] 
from iis_metrics.tblReportData as r 

回答

2

那么,你在混合使用两种不同的方式以无效的方式使用CASE

要么您使用CASE (some column name),然后你必须使用只是一些条件适用该列。这是第一次两个子句OK:WHEN NULLWHEN ''(这是不大不小的“手短”的使用WHEN .. IS NULLWHEN ... = '' - 但是如果你开始使用这种“手短”的符号,你需要在所有使用它你WHEN条款)

但在这种情况下,你不能突然有一个完整的表达你的WHEN....子句你你的第三个子句中尝试。

这是OR版本:您也可以只使用CASE然后每个WHEN条款具有完整的表达 - 试试这个:

CASE 
    WHEN r.servicelayer IS NULL THEN r.topic + '/IAL' 
    WHEN r.servicelayer = '' THEN r.topic + '/IAL' 
    WHEN CHARINDEX('/rssfeed1234/georss/SomMobile', i.URI_STEM) > 0 THEN 'Som Mobile' 
    ELSE r.topic + '/' + r.servicelayer 
END AS [layername] 

现在,这应该工作 - 每个WHEN条款包含了完整表达式因此这个CASE语句是有效的。