2010-09-08 37 views
4

在查詢中,我有一個這樣的列:查詢與案件列

case when X = 1 then 
    case when Y <> 0 then YY else XX end 
    else ZZ 
end as MyColumn 

有沒有一種方式,在另一列,檢查上面列值引用MyColumn而不是重寫case語句?

我應該根據MyColumn值來評估另一列。

由於

+0

你是什麼意思「檢查上面的列值」。你能給個例子嗎? – 2010-09-08 20:29:00

回答

3

否,不無任一:

  • 複製在隨後的列
  • 做初始CASE評價在派生表/內嵌視圖的邏輯:

    SELECT aa.mycolumn, 
         CASE 
         WHEN aa.mycolumn = ? THEN .... 
         END AS next_mycolumn_evaluation 
        FROM (SELECT CASE 
           WHEN X = 1 THEN 
            CASE WHEN Y <> 0 THEN YY 
            ELSE XX END 
           ELSE ZZ 
           END AS mycolumn 
          FROM ...) aa 
    
+0

不幸的是我的查詢是一個視圖,所以我認爲我必須重複這個邏輯。感謝您的回答。 – opaera 2010-09-08 20:25:21

+0

@opeara:SQL Server允許派生表/內嵌視圖 – 2010-09-08 20:29:16

+0

啊,很酷,我會嘗試,但對不起,我不明白你的代碼。順便說一句,我會在線內聯視圖,非常感謝。 – opaera 2010-09-08 20:33:30

0

如果我理解你c (或者我可能不會),(在這張表中,X,Y,XX,YY和ZZ是其他列),你可以在這個表上創建一個計算列,這個表達式就是它的公式..

Alter Table TableName Add NewColumn 
    as Case when X = 1 then 
     Case when Y <> 0 YY else XX end 
     else ZZ end 
0

你也許可以用子查詢來做到這一點。例如:

Select someTable.ID, someTable.A, someTable.B, 
    case subT.myColumn = 0 then 'BLARG' else 'huh?' end As outerMyColumn 
from someTable, 
    (Select ID, case when X = 1 then 
     case when Y <> 0 YY else XX end 
     else ZZ 
    end as MyColumn 
    From someTable 
    where someCondition) subT 
where subT.ID = someTable.ID; 
0

可以編寫這樣 情況下,當X = 1和Y <> 0,則YY 當X = 1和Y = 0,則XX 別的ZZ端 端作爲MyColumn

這裏只有一種情況。