2011-08-19 176 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