根据字段的值对数据进行分类

S4M*_*S4M 2 sql

我有一张桌子:

userid    cityid
1         4
1         5
2         4
2         1
3         1
3         5
Run Code Online (Sandbox Code Playgroud)

SQL或hive中是否有一种方法可以将其转换为如下表:

userid    city1    city4   city5
1         false    true    true
2         true     true    fase
3         true     false   true
Run Code Online (Sandbox Code Playgroud)

我不确定是否有一个词来描述这种操作...任何帮助将不胜感激!

Tar*_*ryn 7

这基本上是一个PIVOT.您没有指定您正在使用的RDBMS,但您可以使用聚合函数和CASE语句在任何数据库中获取结果:

select userid,
  max(case when cityid = 1 then 'true' else 'false' end) city1,
  max(case when cityid = 2 then 'true' else 'false' end) city2,
  max(case when cityid = 3 then 'true' else 'false' end) city3,
  max(case when cityid = 4 then 'true' else 'false' end) city4,
  max(case when cityid = 5 then 'true' else 'false' end) city5
from yourtable
group by userid
Run Code Online (Sandbox Code Playgroud)

请参阅 SQL Fiddle with Demo

结果:

| USERID | CITY1 | CITY2 | CITY3 | CITY4 | CITY5 |
--------------------------------------------------
|      1 | false | false | false |  true |  true |
|      2 |  true | false | false |  true | false |
|      3 |  true | false | false | false |  true |
Run Code Online (Sandbox Code Playgroud)