具有多个条件和排序的案例陈述

时间:2016-08-22 19:40:29

标签: sql case

我需要从“世界”表中提取并添加一个CASE WHEN语句,以便在国家“名称”为“B%”时将其设置为“加勒比海”更改为“北美”,但是当名称不是像'B%'那么大陆将='南美洲'。还需要按名称的ASC顺序。

我知道执行此操作的所有命令,但似乎无法以正确的顺序或语法获取它们。下面是问题和截图。

Array#splice

1 个答案:

答案 0 :(得分:0)

你只需要打破你的问题。请记住CASE将按顺序检查案例...因此,如果第一个案例的评估结果为TRUE,则永远不会检查该行的以下测试。

你在多条件案件陈述中被挂断了。具体而言,对于您询问的部分(北美和南美),您需要检查两个条件。

  1. 这个国家在加勒比地区吗?
  2. 名称是否以B开头?
  3. 所以,按照他们要求的顺序逐步完成。

    • 大洋洲成为澳大利亚:when continent = 'Oceania' then 'Australasia'
    • 欧亚大陆和土耳其的国家/地区前往欧洲/亚洲:when continent = 'Eurasia' or continent = 'Turkey' then 'Europe/Asia'
    • 以'B'开头的加勒比群岛前往北美洲,其他加勒比岛屿前往南美洲:

    when continent = 'Caribbean' and name like 'B%' then 'North America'

    when continent = 'Caribbean' and name not like 'B%' then 'South America'

    现在把它们放在一起......

    select
      name, 
      continent,
      case 
        when continent = 'Oceania' then 'Australasia' 
        when continent = 'Eurasia' or continent = 'Turkey' then 'Europe/Asia'
        when continent = 'Caribbean' and name like 'B%' then 'North America'
        when continent = 'Caribbean' and name not like 'B%' then 'South America'
        else continent 
      end as NewContinent
    from
      world
    order by 
      name asc