sql server使用case语句和in语句

时间:2012-11-09 20:18:54

标签: sql sql-server sql-server-2005

我有一个包含3个字段userID,state,country的表格,我正在尝试运行一个查询,查找该国家/地区是Great Brittin,加拿大或美国的所有记录,如果该国家/地区是US,我只想要在加利福尼亚州创建记录,犹他州和亚利桑那州

我认为这可能有效,但没有

select  *
from    myTable
where   county in ('GB','CA','US')
  and   case when country = 'US' then  state in ('CA','UT','CA')  end

任何SQL大师都有想法吗?

** **编辑 我想我试图简化这个。国家和州作为变量传递,因此不确定是否会有“美国”国家,但是是否会有州名单

declare @country varchar(500)
,   @state varchar(500)
,   @sqlStr varchar(4000)

select @sqlStr = 'select * from Addresses
WHERE country IN ('+@country+')
OR (country = ''US'' AND stateCode IN ('+@state+'))'

exec (@sqlStr)

这使得这更难。

3 个答案:

答案 0 :(得分:2)

用类似的东西替换最后一行:

and (Country <> 'US' or state in ('ca', 'ut', 'az'))

答案 1 :(得分:1)

首先,您错过了查询中的FROM Table部分。无论如何,这应该这样做:

SELECT *
FROM YourTable
WHERE Country IN ('GB','CA')
OR (country = 'US' AND [state] IN ('CA','UT','CA'))

答案 2 :(得分:0)

你是说这个

吗?
country in ('GB','CA')
or (country = 'US' and  state in ('CA','UT','CA') )