2013-09-30 73 views
0

我試圖使用Microsoft SQL Server,各國可以通過從0到4,0表示全球SQL過濾國家的編號爲地區和全球範圍內也

我已經建立了一個編號的區域進行濾波,以建立一個SQL查詢查詢哪些過濾區域1到4正如下面的例子,但我不知道如何獲得所有的國家,如果0(是全球)​​被選爲一個地區。

declare @region as integer 
set @region = 1 
select * 
from Country where 
case LEFT(name,2) 
when 'US' THEN 1 
when 'UK' THEN 2 
WHEN 'DE' THEN 3 
WHEN 'CZ' THEN 4 
WHEN 'ES' THEN 4 
WHEN 'FR' THEN 4 
WHEN 'IT' THEN 4 
WHEN 'NL' THEN 4 
WHEN 'PL' THEN 4 
WHEN 'RO' THEN 4 
WHEN 'SE' THEN 4 
END = @region 

任何想法?有更好的方法來構建查詢嗎?

感謝

+2

你可以添加'region'作爲**字段**到「國家」表格? –

回答

2

要返回所有的國家時@region是0:

declare @region as integer 
set @region = 1 
select * 
from Country where 
    @region = 0 
OR 
    case LEFT(name,2) 
     when 'US' THEN 1 
     when 'UK' THEN 2 
     WHEN 'DE' THEN 3 
     WHEN 'CZ' THEN 4 
     WHEN 'ES' THEN 4 
     WHEN 'FR' THEN 4 
     WHEN 'IT' THEN 4 
     WHEN 'NL' THEN 4 
     WHEN 'PL' THEN 4 
     WHEN 'RO' THEN 4 
     WHEN 'SE' THEN 4 
    END = @region 

此外,您還可以添加區爲國家表中的列?這會讓整個事情變得更容易?

+0

我同意,將該區域添加到基表。至少當你想將國家從一個地區轉移到另一個地區時,這樣做更容易。 – Tony

+0

更不用說那裏有200個左右的國家。這將做出長時間的查詢。 – Szymon

+0

謝謝你們。我無法修改表格,所以我正在尋找替代解決方案。這將會非常有效。再次感謝 – Selrac

0
select * 
from Country 
where @region = 0 OR 
(case LEFT(name,2) 
when 'US' THEN 1 
when 'UK' THEN 2 
WHEN 'DE' THEN 3 
WHEN 'CZ' THEN 4 
WHEN 'ES' THEN 4 
WHEN 'FR' THEN 4 
WHEN 'IT' THEN 4 
WHEN 'NL' THEN 4 
WHEN 'PL' THEN 4 
WHEN 'RO' THEN 4 
WHEN 'SE' THEN 4 
END = @region) 

是讓它工作的方法。但是,您不應該使用硬編碼的case語句,而應該有一個查找表,其中包含國家名和所在區域代碼。然後,您可以重寫SQL語句以從該表中提取國家/地區代碼,並將其與區域進行比較。

0

,你可以把一個國家中的表名爲區域場 然後把這個條件如下面

select * from Country where @region = 0 or Country.region [email protected] 

你可以在你的代碼做這樣

select * from Country where @region = 0 OR (case LEFT(name,2) 
    when 'US' THEN 1 
    when 'UK' THEN 2 
    WHEN 'DE' THEN 3 
    WHEN 'CZ' THEN 4 
    WHEN 'ES' THEN 4 
    WHEN 'FR' THEN 4 
    WHEN 'IT' THEN 4 
    WHEN 'NL' THEN 4 
    WHEN 'PL' THEN 4 
    WHEN 'RO' THEN 4 
    WHEN 'SE' THEN 4 
    END = @region)