[英]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.