2016-08-22 57 views
0

我需要从“世界”表中拉出并添加CASE WHEN语句以使其非洲大陆名称'Caribbean'在国家'名称'为'B'时变为'北美' ',但是当名称不是'B%'时,那么大陆将会='南美洲'。还需要按ASC顺序进行命名。具有多种条件和排序的案例陈述

我知道所有的命令来做到这一点,但似乎无法让他们在正确的顺序或语法。下面是问题和屏幕截图。

SQL.zoo Problem#13

+5

告诉我们一些你已经尝试使我们能更好地了解您所需要的解释。也不要让社区为此工作,将示例数据放在您的问题中,并且使您的条件更易于理解,而不仅仅是简单地放在段落列表中? – Matt

+0

使用案件陈述的早期逃避方法(一旦条件满足,它会退出案例)......'当大陆='加勒比'并且名称像'B%'那么'北美'当continent ='加勒比'然后'南美'' – xQbert

回答

0

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

你越来越挂在多个条件的case语句。具体而言,对于您询问的部分(北美和南美),您需要检查两个条件。

  1. 是加勒比海国家吗?
  2. 名称以B开头还是不开头?

因此,按照他们要求的顺序进行。

  • 大洋洲变成大洋洲:在欧亚大陆和土耳其进入欧洲/亚洲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 
+0

感谢一堆!对不起,没有更好地格式化问题,我将在未来。但非常感谢您的帮助! –

+0

不用担心@MitchCorreia我知道这是你第一次。不要忘记接受正确的答案,并提供有用的答案。 – scsimon