Hive SQL logi c - случай, когда выписка - PullRequest
0 голосов
/ 16 апреля 2020

Мой запрос:

case 
   when upper(a.camp_name) like "%Event%" and (upper(a.camp_name) not like "%Event-WBR%" or upper(a.camp_name) not like "%Event-Webinar%") THEN "Field"
   else "Demand"
end as Tactic

Желаемый вывод:

Event-WBR = Demand
Event = Field

Фактический вывод:

Event-WBR = Field
Event = Field

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Вы можете использовать два when s:

(case when (upper(a.camp_name) not like "%Event-WBR%" or 
            upper(a.camp_name) not like "%Event-Webinar%"
           ) then 'Event'
      when upper(a.camp_name) like "%Event%" then 'Event'
      else 'Deman'
 end) as tactic
0 голосов
/ 16 апреля 2020

На самом деле вы должны заменить 'или' на 'и'

case 
       when upper(a.camp_name) like "%Event%" and (upper(a.camp_name) not like "%Event-WBR%" and upper(a.camp_name) not like "%Event-Webinar%") THEN "Demand"
       else "Field"
    end as Tactic

Но вот еще 2 других варианта:

Если вы хотите сделать только для слова «Событие», Вы можете сделать что-то вроде этого

case 
   when upper(a.camp_name) like "%Event" and (upper(a.camp_name) not like "%Event-WBR%" or upper(a.camp_name) not like "%Event-Webinar%") THEN "Demand"
   else "Field"
end as Tactic

Если вы хотите исключить только эти 2 слова, вы можете сделать это следующим образом.

case 
   when upper(a.camp_name) like "%Event-WBR%" or (upper(a.camp_name) like "%Event-Webinar%" THEN "Field"
   else "Demand"
end as Tactic
...