繁体   English   中英

SQL按编号区域和全局过滤国家/地区

[英]SQL filter countries by numbered region and also globally

我正在尝试使用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

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

谢谢

要在@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

此外,您可以将区域添加为国家/地区表中的列吗? 那会让整件事更容易吗?

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语句以从该表中提取国家/地区代码并将其与区域进行比较。

您可以在国家/地区表中放置一个名为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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM