2016-08-22 3 views
0

Мне нужно вытащить из таблицы «мир» и добавить оператор CASE WHEN, чтобы он стал континентом. «Карибский» изменился на «Северная Америка», когда название страны «LIKE» B% ', но когда имя не LIKE' B% ', то континент будет =' Южная Америка '. Также должно быть в порядке ASC по имени.Дело с несколькими условиями и сортировкой

Я знаю все команды, чтобы сделать это, но, похоже, не может получить их в правильном порядке или синтаксисе. Здесь есть вопрос и скриншот.

SQL.zoo Problem#13

+5

показать нам то, что вы попробовали, так что мы можем лучше понять, что вам нужно объяснение на. Также не заставляйте сообщество работать для этого, чтобы привести примеры данных в ваш вопрос и сделать ваши условия более понятными, чем просто в абзаце, возможно, маркированном списке? – Matt

+0

использовать метод раннего выхода case-case (после того, как условие выполнено, оно завершается так) ... 'when continent = 'Caribbean' и имя типа 'B%', затем 'Северная Америка' , когда continent = 'Caribbean 'then' South America '' – xQbert

ответ

0

Вам просто нужно, чтобы сломать вашу проблему. Помните, что CASE проверит случаи в порядке ... так что если первый случай оценивается до TRUE, то следующие тесты никогда не проверяются для этой строки.

Вы получаете повесили трубку на несколько случаев. В частности, для той части, о которой вы просили (Северная Америка и Южная Америка), вам нужно проверить два условия.

  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

Смежные вопросы