0

我正在尝试使用 Microsoft SQL 服务器构建 SQL 查询,其中国家可以按编号从 0 到 4 的区域进行过滤,0 表示全球

我已经构建了一个查询,可以按照下面的示例正确过滤区域 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

有任何想法吗?有没有更好的方法来构建查询?

谢谢

4

3 回答 3

2

为 0 时返回所有国家@region

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

另外,您可以将区域作为列添加到国家/地区表吗?那会让整个事情变得更容易吗?

于 2013-09-30T21:11:41.837 回答
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 语句以从该表中提取国家代码并将其与区域进行比较.

于 2013-09-30T21:12:24.137 回答
0

您可以在国家表中放置一个名为 region 的字段,然后将这个条件放在下面

   select * from Country where @region = 0 or Country.region =@region

你可以在你的代码中这样做

  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)
于 2013-10-01T06:27:24.817 回答