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:将行转换为列的主要内容,如果未能解决你的问题,请参考以下文章

MS Access SQL 将行转换为列

SQL Server 将行数据转换为列标题

Redshift SQL - 将行按 id 转换为列

BigQuery 标准 SQL 如何将行转换为列

在 SQL 中使用“Pivot”将行转换为列

将行转换为列的 MS SQL 连接查询