如何在标准sql中重新组织表?

时间:2017-03-15 20:26:20

标签: sql pivot

我有一张像

这样的表格
Id | Name | Num
---------------- 
#1 | a    | 3
#1 | b    | 4
#2 | a    | 1
#2 | e    | 2  

并希望将其重组为

   | a | b | e
---------------
#1 | 3 | 4 |
#2 | 1 |   | 2 

我实际上可以在python中使用pandas库来实现它,但是当数据集很大时它非常慢。 我想知道是否可以在SQL中完成。

1 个答案:

答案 0 :(得分:2)

这称为旋转。通用方法使用条件聚合:

select id,
      max(case when name = 'a' then num end) as a,
      max(case when name = 'b' then num end) as b,
      max(case when name = 'e' then num end) as e
from t
group by id;

这假定您需要三个额外的列,并且您知道名称。如果您想要name中任何值的列,那么您需要构造动态SQL。如果你按照上面的模板,通过在表中查询列中的值,在Python中构建这样的查询可能并不困难。