2014-04-08 4 views
1

У меня есть таблица, которая имеет две иды страны наряду с некоторыми другими столбцамисаз альтернативного

как образец что-то вроде

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

Web ID страны 1000 для Великобритании и CountryId = 5 для Великобритании , (Также countryid = 1 для неизвестных, которые считают Великобританией). (Две страны из двух разных баз данных имеют свой собственный список стран) У меня есть представление, которое использует эту таблицу, и я пытаюсь создать поле, чтобы определить, является ли строка в Великобритании или нет.

Это то, что у меня есть на данный момент, но этот бит Гон использоваться в целях

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

В зависимости от ваших указаний вы должны точно проверить план выполнения. –