2014-04-08 97 views
1

我已經持有兩國IDS與其他一些列CASE語句替代

爲樣本像

Table(Id int,Title varchar(250), WebCountryId int, CountryId int) 

的Web國家ID 1000是英國和CountryId = 5沿着表是英國。 (另外countryid = 1是未知的,認爲是英國)。 (兩個countryid是由兩個不同的數據庫驅動的,這兩個數據庫都有自己的國家列表) 我有一個使用此表的視圖,我試圖創建一個字段以確定該行是否爲英國。

這是我的那一刻,但該位戈納在視圖

SELECT CountryId,WebCountryId, 
     (CASE WHEN (T.WebCountryId IS NULL AND T.CountryId IS NULL) THEN 1 
       WHEN (T.WebCountryId IS NOT NULL AND T.WebCountryId <> 1000) THEN 0 
       WHEN (T.CountryId IS NOT NULL AND Enquiry.CountryId NOT in(1,5)) THEN 0 
       WHEN (T.WebCountryId IS NULL AND T.CountryId in(2,5)) THEN 1 END)as Uk   
FROM Table T 

是否有任何其他的方式來實現這一目標而無需使用case使用嗎?

+1

這就是爲什麼你不應該給NULL一個隱含值,我只是有一個值爲每個選項,而不是處理空值。 –

+1

@ TMcKeown:這是我在一個非常舊的數據庫中工作的時候遇到的問題,在這個數據庫中沒有人知道它爲什麼允許NULL) –

回答

0

我會修復數據,以便您的查詢可以直接使用邏輯,如果可能的話。否則你有什麼是你將不得不忍受的。

+0

在這種情況下,我無法改變現有的結構。感謝您的輸入! –

1

您可以使用UNION,只是在兩組之間劃分邏輯。

SELECT T.CountryId 
     ,T.WebCountryId 
     ,0 AS Uk 
    FROM Table_T AS T 
    WHERE (T.WebCountryId IS NOT NULL AND T.WebCountryId <> 1000) 
     OR (T.CountryId IS NOT NULL AND Enquiry.CountryId NOT IN (1, 5)) 
UNION ALL 
SELECT T.CountryId 
     ,T.WebCountryId 
     ,1 AS Uk 
    FROM Table_T AS T 
    WHERE (T.WebCountryId IS NULL AND T.CountryId IS NULL) 
     OR (T.WebCountryId IS NULL AND T.CountryId IN (2, 5)) 
+0

這是在視圖中使用的一個好選擇嗎? –

+0

根據您擁有的索引,您應該檢查執行計劃以確定知道。 –