我有一个如下所示的表格
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 c
和col d
成为值。因此,对于col b
中的每个值,它需要有两列用于col c and d
中的值。旋转表看起来非常像下面的那个:
1 | 3 | 4.5 | N/A | N/A
2 | 4 | 10.3 | 5 | 8
我使用python-pandas完成了这项工作,但我希望使用SQL来实现。
下面是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