2011-08-19 91 views
0

让我们来简单介绍一下。案例陈述逻辑

我有一张桌子。

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 

这里King没有吸烟记录。所以我想让它进入779桶。我该如何执行该操作?

+2

如果习惯是自由文本,您有[数据修改异常](http://en.wikipedia.org/wiki/Database_normalization#Free_the_database_of_modification_anomalies)。并不确定你想要什么。我无法看到表格之间的字段与起始者之间的关系如何 – gbn

+1

还有一些示例输出是好的。此外,**在您的示例查询中拼写错误的关键字时,您的努力并不会显示出太多的关注!** – JNK

+1

什么是's.value'?以及代表您使用'CASE '声明? – Lamak

回答

0

不知道为什么你在这里做一个铸件(根据您的样本数据),因此,改变这种:

WHEN (ISNULL(CAST(value as varchar(max)),'')='') THEN '779' 

要这样:

WHEN ISNULL(value,'') = '' THEN '779' 

而且 - 意识到方式你正在做你的通配符,你所有'不吸烟'的价值将会是'777',因为它们匹配第一种模式(PATINDEX('%smoking%',value)(即,第二种模式甚至不被检查)。

编辑
问题的答案在注释:


1)如何将它拉王的记录 - >吸烟 - >的DisplayIndex 2?
答案:King的样本集中没有记录,显示索引值为2.您无法提取不存在的记录。

2)我想检查...酒精记录。
答案:您已经解决了吸烟者&非吸烟者的问题。只是为酒糟做同样的事情。例如:WHEN PATINDEX('%alchohol%',value) > 0 THEN '779'

3)我希望把国王的学生在779
:他是。 CASE声明的工作方式,如果WHEN条件都没有评估为true(即,...WHEN PATINDEX('%smoking%',value) > 0),则使用ELSE语句。由于没有任何WHEN陈述将评估为国王true,他将在779下。

+0

它将如何拉取王 - >吸烟 - > displayIndex 2的记录?当吸烟国王没有纪录时?我想检查所有可用于吸烟记录和酒精记录的学生。现在国王只喝酒不吸烟。我想把国王学生放在779以下。 – palum

+0

我很难理解你的问题,但看到我修正的答案。如果你仍然认为国王不在779以下,那么请说明你为什么这么认为 - *他不在那里,因为...... X *。 – Chains

+0

我需要把所有的学生记录与酒精和吸烟。不管他们有没有。在上面的例子中,你可以看到国王没有记录吸烟。我想要国王的卷不,或访问ID去779桶。 – palum