我有一张表:
userid cityid
1 4
1 5
2 4
2 1
3 1
3 5
SQL或hive中是否有办法将其转换为如下表:
userid city1 city4 city5
1 false true true
2 true true fase
3 true false true
我不确定是否有一个词来描述这种操作...... 任何帮助将不胜感激!
答案 0 :(得分: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
结果:
| USERID | CITY1 | CITY2 | CITY3 | CITY4 | CITY5 |
--------------------------------------------------
| 1 | false | false | false | true | true |
| 2 | true | false | false | true | false |
| 3 | true | false | false | false | true |