CASE语句备用

时间:2014-04-08 14:32:33

标签: sql sql-server sql-server-2008-r2

我有一张表,其中包含两个国家/地区ID以及其他一些列

作为类似

的示例
Table(Id int,Title varchar(250), WebCountryId int, CountryId  int)

网络国家/地区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的情况下实现此目的?

2 个答案:

答案 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 ))

答案 1 :(得分:0)

我会修复数据,以便您的查询可以使用简单的逻辑(如果可能的话)。否则你所拥有的就是你将要拥有的东西。