SQL:将行转换为列
Posted
技术标签:
【中文标题】SQL:将行转换为列【英文标题】:SQL: converting rows into columns 【发布时间】:2021-07-26 21:25:15 【问题描述】:我目前有一个如下所示的表格:
user_id | device_id | device_type |
---|---|---|
12_aa | 1245 | mobile |
15_ab | 8909 | tablet |
17-ya | 9090 | mobile |
18-ac | 8900 | desktop |
我正在尝试将此表格转换为以下表格:
user_id | mobile | tablet | desktop |
---|---|---|---|
12_aa | 1245 | null | null |
15_ab | null | 8909 | null |
17_ya | 9090 | null | null |
18_ac | null | null | 8900 |
您能帮忙实现这一点吗?
【问题讨论】:
【参考方案1】:在下面使用
select * from `project.dataset.table`
pivot (max(device_id) for device_type in ('mobile', 'tablet', 'desktop'))
如果应用于您问题中的样本数据 - 输出是
【讨论】:
【参考方案2】:您可以使用条件聚合:
select user_id,
max(case when device_type = 'mobile' then device_id end) as mobile,
max(case when device_type = 'tablet' then device_id end) as tablet,
max(case when device_type = 'desktop' then device_id end) as desktop
from t
group by user_id;
【讨论】:
这非常快!谢谢!以上是关于SQL:将行转换为列的主要内容,如果未能解决你的问题,请参考以下文章