2016-12-27 77 views
0

美好的一天。我有一張名爲subObjGroup的表格。我從這張表中選擇並對幾個欄目進行案例陳述。我正在查看typeCol列,以便分類使用哪些適當的嵌套case操作符。腳本中的CASE聲明不分段行進行比較

問題是,當它執行語句時,我得到vCheck列的結果不正確。我沒有得到基於病例陳述標準的數據。不知道我做錯了什麼。在numid和value是否相同的情況下,會出現幕後的「掛鉤」或「鏈接」嗎?任何幫助最受讚賞。

subObjGroup表與vCheck列不正確的結果

groupid eventid numid tagVal greaterThan greaterEqThan lessThan lessEqThan equalTo typeCol vCheck activeid getVal 
28  18  9000001 NULL NULL  NULL   105   NULL  NULL  3  1 68   92.907 
9  19  9000001 NULL NULL  NULL   105   NULL  NULL  3  1 68   92.907 
10  20  9000001 NULL 105   NULL   NULL  NULL  NULL  1  0 68   92.907 

理想的效果,請看看vCheck

groupid eventid numid tagVal greaterThan greaterEqThan lessThan lessEqThan equalTo typeCol vCheck activeid getVal 
28  18  9000001 NULL NULL  NULL   105   NULL  NULL  3  0 68   92.907 
9  19  9000001 NULL NULL  NULL   105   NULL  NULL  3  0 68   92.907 
10  20  9000001 NULL 105   NULL   NULL  NULL  NULL  1  1 68   92.907 

腳本

DECLARE @nID nvarchar(50) 
SET @nID = '9000001' 

SELECT 
    g.groupid, 
    g.eventid, 
    g.numid, 
    g.tagVal, 
    g.greaterThan, 
    g.greaterEqThan, 
    g.lessThan, 
    g.lessEqThan, 
    g.equalTo, 
    g.typeCol, 
    vCheck = 
      CASE 
      WHEN g.typecol = 0 THEN CASE 
       WHEN g.getVal = g.tagval THEN 0 
       ELSE 1 
       END 
      WHEN g.typecol = 1 THEN CASE 
       WHEN g.getVal > g.greaterthan THEN 0 
       ELSE 1 
       END 
      WHEN g.typecol = 2 THEN CASE 
       WHEN g.getVal >= g.greatereqthan THEN 0 
       ELSE 1 
       END 
      WHEN g.typecol = 3 THEN CASE 
       WHEN g.getVal < g.lessthan THEN 0 
       ELSE 1 
       END 
      WHEN g.typecol = 4 THEN CASE 
       WHEN g.getVal <= g.lesseqthan THEN 0 
       ELSE 1 
       END 
      WHEN g.typecol = 5 THEN CASE 
       WHEN g.getVal = g.equalto THEN 0 
       ELSE 1 
       END 
      ELSE 0 
      END, 
    g.activeid, 
    g.getVal 

FROM subobjgroup g 
WHERE numid = @nID 
+1

您許多需要使用'ISNULL(VAL1,VAL2)'或'聚結,處理空比較好(VAL1,VAL2)' – xQbert

回答

2

我覺得邏輯簡直是倒退(你在subca中混合了「1」和「0」 SES)​​。

不過,我覺得這個邏輯更簡單地寫爲:

vCheck = (CASE WHEN g.typecol = 0 AND g.getVal = g.tagval THEN 1 
       WHEN g.typecol = 1 AND g.getVal > g.greaterthan THEN 1 
       WHEN g.typecol = 2 AND g.getVal >= g.greatereqthan THEN 1 
       WHEN g.typecol = 3 AND g.getVal < g.lessthan THEN 1 
       WHEN g.typecol = 4 AND g.getVal <= g.lesseqthan THEN 1 
       WHEN g.typecol = 5 AND g.getVal = g.equalto THEN 1 
       ELSE 0 
      END),