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

时间:2012-11-09 14:31:46

标签: sql

我有一张表:

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

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

1 个答案:

答案 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

请参阅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 |