SQL中的数据透视表

时间:2017-12-19 15:52:56

标签: sql google-bigquery

我有一个类似于以下内容的表

col a | col b | col c | col d
1     | A     |  3    | 4.5
2     | A     |  4    | 10.3
2     | B     |  5    | 8

我希望以col b形成列并且col ccol d成为值的方式来透视此表。因此,对于col b中的每个值,它需要有两列用于col c and d中的值。旋转表看起来非常像下面的表:

  1 | 3 | 4.5  | N/A | N/A
  2 | 4 | 10.3 | 5   | 8

我使用python-pandas完成了这项工作,但希望使用SQL。

1 个答案:

答案 0 :(得分:2)

下面是BigQuery Standard SQL,它为您提供了两个值(在您的示例中为A和B)的非常简单(但是冗长)查询,您可以将其扩展为8-9个值。

   
#standardSQL
with `yourproject.yourdataset.yourtable` as (
  select 1 col_a, 'A' col_b, 3 col_c, 4.5 col_d union all
  select 2, 'A', 4, 10.3 union all
  select 2, 'B', 5, 8 
)
select 
  col_a, 
  min(if(col_b='A', col_c, null)) A_1,
  min(if(col_b='A', col_d, null)) A_2,
  min(if(col_b='B', col_c, null)) B_1,
  min(if(col_b='B', col_d, null)) B_2
from `yourproject.yourdataset.yourtable` t
group by col_a   

结果是

col_a   A_1     A_2     B_1     B_2  
1       3       4.5     null    null     
2       4       10.3    5       8.0  
相关问题