代码之家  ›  专栏  ›  技术社区  ›  Selrac

SQL按编号区域和全球范围筛选国家/地区

  •  0
  • Selrac  · 技术社区  · 11 年前

    我正试图使用Microsoft SQL server构建一个SQL查询,在该查询中,国家/地区可以按编号从0到4的区域进行筛选,0表示全球

    我已经构建了一个查询,根据下面的例子正确地过滤了区域1到4,但如果选择0(为Global)作为区域,我不知道如何获取所有国家/地区。

    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
    

    有什么想法吗?有没有更好的方法来构造查询?

    谢谢

    3 回复  |  直到 11 年前
        1
  •  2
  •   Szymon    11 年前

    返回所有国家/地区 @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
    

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

        2
  •  0
  •   Vulcronos    11 年前
    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语句,从该表中提取国家代码,并将其与地区进行比较。

        3
  •  0
  •   Nitu Bansal    11 年前

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