SQL中的数据透视表

问题描述 投票:1回答:1

我有一个如下所示的表格

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来实现。

sql google-bigquery
1个回答
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  
© www.soinside.com 2019 - 2024. All rights reserved.