2017-05-27 140 views
0

假设有一个dim_user_info表,它包含非重复的user_id及其id_number。 现在我想将它们分类:'case - when'返回多个结果吗?

select 
a.user_id, 
(case when user_id in (1,3,5,7) then 'class1' 
when id_number in (128,329,349) then 'vip' 
end) as category 
from dim_user_info a 

如果一使用者信息满足同时两个条件,我要得到完整的信息,像user c如下表:

user_id id_number category 
1   111  class1 
2   128   vip 
3   329  class1 
3   329   vip 
6   128   vip 
7   55  class1 

这是可行的配置单元?谢谢你的帮助。

+0

'user_id'可以是“1,3,5或7”或“a”,“c”或“e”,而不是两个 –

回答

0

您可以尝试使用UNION查询:

select 
    user_id, 
    'class1' as category 
from dim_user_info 
where user_id in (1,3,5,7) 
union all 
select 
    user_id, 
    'vip' 
from dim_user_info 
where id_number in (128,329,349) 

我不知道这是否会在蜂巢SQL最高效的解决方案,但它是有相同的记录的一种方式出现多次,每个可能的匹配类别一次。

如果您还想包含不匹配的用户,则可以使用另一个联合。

+0

非分类用户,iE user-iid 4(与不匹配的id_number)将不会在这里列出,并且您在第二个查询中花了两次user_id而不是id_number – Turo

+0

我不这么认为,看看他的id_number(128,329,349)'和你的地方条款 – Turo

+0

@Turo你说得对,我错过了,谢谢。 –

0

如果不是所有的用户进行分类,你可以使用一个分类表中的列

USER_ID, ID_NUMBER, 类

和查询

select 
a.user_id, c.category 
from dim_user_info a 
left outer join classification c 
on (a.user_id = c.user_id or a.id_number = c.id_number) 
0
select ui.usr 
     ,e.col 

from dim_user_info ui 
     lateral view explode(array(
      case when user_id in (1,3,5,7)  then 'class1' end 
      ,case when id_number in (128,329,349) then 'vip' end 
      )) e 

where e.col is not null