2013-06-12 54 views
0

我有我需要使用的病例陳述結果。我想將它放在Where子句中,但是由於CASE語句的複雜性,我遇到了一些困難。病例陳述結果在哪裏條款

這是我的CASE聲明...結果要麼是「實現」要麼是「未實現」。我需要最終結果中的「未實現」。

CASE WHEN (ESF.ID IN 
    ('727','732','737','813','738','739','740','741','742','743') 
    AND b.ANSWER ='Checked') THEN 'Not Achieved' 
    WHEN (ESF.ID IN 
     ('727','732','737','813','738','739','740','741','742','743')   
     AND Z.ANSWER ='Unchecked') THEN 'Achieved' 
     ELSE '' 
    End AS Results_c 
+0

我在哪裏子句應該是: Where Results_c ='Not Achieved – user2133330

+0

這可以在視圖中完成嗎?我的觀點是無法改變的。 – user2133330

+0

已經在視圖中的這種情況聲明?結果_c已經是視圖的輸出列嗎? –

回答

0

CASE聲明過程,有一個規則是從最早出現的一個開始時間進行評估。只要規則滿足(返回TRUE),此規則將被執行,並且此CASE statemnt中的規則檢查結束。

因此重寫你的情況爲:

CASE WHEN ESF.Form_Dim_ID NOT IN
( '727', '732', '737', '813', '738', '739','740 '','741','742','743')THEN'' WHEN b.ANSWER ='Checked')THEN'Not Achieved' WHEN Z.ANSWER ='Unchecked')那麼'已完成' 否則''' 結束,因爲Results_c

如果你需要有隻Not Achieved然後

WHERE 
[...] 
AND (ESF.Form_Dim_ID NOT IN 
     ('727','732','737','813','738','739','740','741','742','743') 
    AND b.ANSWER ='Checked') 
    ) 

但是,獲得預期結果可能非常困難,因爲此CASE語句中的每個下一個檢查使用不同的列,並且不會滿足先前檢查的其他組合。例如: -

WHEN ESF.ID IN ('727','732','737','813','738','739','740','741','742','743') 

如果ESF.ID不在此列表中? (也就是爲什麼整數被稱爲字符串?)

`b.ANSWER ='Checked` and `Z.ANSWER ='Unchecked'` 

如果值是其他方式或完全不同?等等。

1

如果你要過濾的select語句的結果,這樣只排在那裏Results_c =的情況下表達式的值,然後只把那的where子句

Select [stuff] 
From tableName 
Where (ESF.ID IN 
     ('727','732','737','813','738','739','740','741','742','743') 
      And b.ANSWER ='Checked') Or 
     (ESF.ID IN 
     ('727','732','737','813','738','739','740','741','742','743') 
      And Z.ANSWER ='Unchecked') 

權在這種情況下,我發現IDS的兩個名單是相同的,所以你也可以這樣寫:

Select [stuff] 
From tableName 
Where ESF.ID IN ('727','732','737','813','738','739','740','741','742','743') 
    And (b.ANSWER = 'Checked' Or Z.ANSWER ='Unchecked') 

要只顯示那些有實現,這樣的方式

Select [stuff] 
From tableName 
Where ESF.ID IN ('727','732','737','813','738','739','740','741','742','743') 
      AND b.ANSWER ='Checked' 
+0

感謝您的回覆。有一個問題......那麼我將如何只顯示在結果窗口中沒有實現的那些?這部分是新的,因爲我從來沒有像這樣的案例陳述。 – user2133330

+0

只需修改Where子句中的過濾condiditon謂詞,以僅指定「未實現」值......請參閱我的編輯 –

+0

在Where子句中的Results_c上獲取無效的列名稱。 – user2133330