2

我有一张像这样的桌子:

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

我不确定有什么词可以描述这种操作......任何帮助将不胜感激!

4

1 回答 1

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

请参阅带有演示的 SQL Fiddle

结果:

| USERID | CITY1 | CITY2 | CITY3 | CITY4 | CITY5 |
--------------------------------------------------
|      1 | false | false | false |  true |  true |
|      2 |  true | false | false |  true | false |
|      3 |  true | false | false | false |  true |
于 2012-11-09T14:46:47.410 回答