如何在SQL中对表分组实现行转列得到目标汇总表?
解决方案
你可以使用条件聚合实现行转列效果,该写法兼容MySQL、PostgreSQL、SQL Server等所有主流SQL数据库:
SELECT Task, MAX(CASE WHEN Type = 'type1' THEN Time_Taken END) AS type1_time, MAX(CASE WHEN Type = 'type2' THEN Time_Taken END) AS type2_time FROM Tasks GROUP BY Task ORDER BY Task;
逻辑说明
- 按照
Task字段分组,每个任务对应一行结果 - 通过
CASE WHEN按类型筛选对应的耗时记录,因为每个任务每个类型仅有一条记录,使用MAX/MIN聚合函数即可提取对应的耗时值,无匹配记录时会返回NULL
如果你使用的是支持PIVOT语法的数据库(如SQL Server、Oracle),也可以用以下写法:
SELECT Task, [type1] AS type1_time, [type2] AS type2_time FROM Tasks PIVOT ( MAX(Time_Taken) FOR Type IN ([type1], [type2]) ) AS PivotTable ORDER BY Task;
内容的提问来源于stack exchange,提问作者Andrew912983
相关产品推荐
相关产品推荐

