You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中将表a转换为表b?实现行转列变换

SQL实现行转列(将Channel类别转为Score值列)

通用方案(适用于所有SQL数据库)

这种方法兼容性拉满,不管用MySQL、PostgreSQL、SQL Server还是Oracle都能跑:

SELECT 
    Name,
    MAX(CASE WHEN Channel = 'Web' THEN score ELSE NULL END) AS Web,
    MAX(CASE WHEN Channel = 'App' THEN score ELSE NULL END) AS App
FROM a
GROUP BY Name;

逻辑很简单:先通过CASE WHEN判断每条记录的Channel值,匹配对应类别时取出score,否则返回NULL;再用GROUP BY Name把同一用户的记录合并,MAX(换成SUM或MIN也可以,因为每个用户每个渠道只有一条数据)会自动提取非空的score值,最终转出目标结构。

特定数据库简化方案(以SQL Server/Oracle为例)

如果你的数据库支持PIVOT函数,可以用更简洁的写法:

SELECT Name, Web, App
FROM a
PIVOT (
    MAX(score)
    FOR Channel IN ([Web], [App])
) AS PivotTable;

PIVOT是专门的行转列函数,指定聚合字段(score)、要转成列的字段(Channel),以及要生成的列名([Web]、[App]),直接输出结果。

内容的提问来源于stack exchange,提问作者kinguuu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 22:33:13