让我们轻松一点。
我有一张桌子。
visitID studentname dob roll.no value displIndex propID
200019 rob 05/18/1937 101 smoking 2 83
200019 rob 05/18/1937 101 2 91
200019 rob 05/18/1937 101 alcohol 1 83
200019 rob 05/18/1937 101 1 91
200020 henry 08/20/1987 102 smoking 2 83
200020 henry 08/20/1987 102 2 91
200021 king 09/21/1982 103 alcohol 1 83
200021 king 09/21/1982 103 1 91
我有一张类似的表。
现在我要做的是,如果该学生的特定visitID
没有显示索引为1,那么在case语句中返回值'779'
。
select visitID,studentname
,dob
,roll.no
,value
,dispIndex
,propID
,case
WHEN (PATINDEX('%smoking%',value) >0 OR
(PATINDEX('%sometimes smoking%',value) > 0) THEN
'777'
WHEN (PATINDEX(%not smoking%,value) >0 OR
(PATINDEX(%do not smoke%,value) >0_ THEN
'778'
WHEN (ISNULL(CAST(value as varchar(max)),'')='') THEN
'779'
ELSE
'779'
END VALUE
国王在吸烟时没有记录。所以我希望它进入779桶。我该怎么做?
答案 0 :(得分:0)
不确定为什么你在这里进行演员(基于你的样本数据),所以改变这个:
WHEN (ISNULL(CAST(value as varchar(max)),'')='') THEN '779'
对此:
WHEN ISNULL(value,'') = '' THEN '779'
另外 - 意识到你做通配符的方式,你所有的“不吸烟”值将是'777'因为它们与第一个模式(PATINDEX('%smoking%',value)
匹配(即第二个模式赢了甚至要检查。
修改强>
在评论中回答您的问题:
2)我想检查...酒精记录
答案:您已经为吸烟者解决了这个问题。非吸烟者。对酒精做同样的事情。例如:WHEN PATINDEX('%alchohol%',value) > 0 THEN '779'
CASE
语句的工作方式,如果WHEN
条件都没有计算到true
(即...WHEN PATINDEX('%smoking%',value) > 0
),则使用ELSE语句。由于没有任何WHEN语句将评估为true
为King,他将在779
之下。