在蜂巢中旋转/转置

时间:2017-09-26 20:48:12

标签: sql hive pivot transpose

我想使用id计算sum和grouby,并将id转换为列标题,将sum作为值。

例如

ID|amount
1|100
1|200
2|100

最终输出

1|2
300|100

任何指针: 我试过下面的查询

select * from table pivot( sum(amount) for id in ("666","111"))

但是低于错误,我不知道我是否错过任何EOF

org.apache.spark.sql.AnalysisException: missing EOF at '(' near 'PIVOT'; line 1 pos 63
        at org.apache.spark.sql.hive.HiveQl$.createPlan(HiveQl.scala:318)

2 个答案:

答案 0 :(得分:0)

您可以使用条件聚合,因为Hive不支持pivot

select sum(case when id='111' then amount else 0 end),sum(case when id='666' then amount else 0 end)
from tbl

id='111'返回boolean,转换为int进行求和。

这假设表中的ID数量有限。

答案 1 :(得分:-1)

Oracle / PLSQL中PIVOT子句的语法是:

SELECT * FROM
(
  SELECT column1, column2
  FROM tables
  WHERE conditions
)
PIVOT 
(
  aggregate_function(column2)
  FOR column2
  IN ( expr1, expr2, ... expr_n) | subquery
)
ORDER BY expression [ ASC | DESC ];

包括分号。重新尝试并告诉我们。