2012-11-09 82 views
0

我有一個表有3個字段的用戶ID,州,國家和我試圖運行一個查詢,查找所有記錄的國家是偉大的英國,加拿大或美國。如果這個國家是美國,我只想要在加利福尼亞州,猶他州和亞利桑那州的唱片。SQL Server使用case語句與in語句

我想這可能工作,但沒有

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 ('[email protected]+') 
OR (country = ''US'' AND stateCode IN ('[email protected]+'))' 

exec (@sqlStr) 

這使得這個困難。

回答

2

有類似的東西代替的最後一行:

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

感謝@Zdravko與變量工作 – Lance

0

你的意思是這個

country in ('GB','CA') 
or (country = 'US' and state in ('CA','UT','CA')) 
+0

我不是那個意思,但會爲好,也許更可讀的工作... –

1

首先,你缺少您的查詢的FROM Table部分。在任何情況下,本應該這樣做:

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