SQL pivot透视查询如何实现单行合并展示多条数据
实现方案
默认PIVOT仅支持聚合单值返回,你需要先对同日期的多条记录做字符串拼接聚合,再执行透视操作即可得到预期结果,不同数据库的实现语法略有区别:
通用思路(兼容所有数据库)
不用PIVOT语法也可以通过条件聚合实现,兼容性最高:
SELECT 'schedule' AS playtime, -- 按日期拼接对应时段活动,分隔符可自定义 GROUP_CONCAT(CASE WHEN day = 'monday' THEN CONCAT(time, ' - ', act) END SEPARATOR '<br>') AS monday, GROUP_CONCAT(CASE WHEN day = 'tuesday' THEN CONCAT(time, ' - ', act) END SEPARATOR '<br>') AS tuesday FROM 你的表名 GROUP BY playtime;
不同数据库差异说明
- MySQL 直接用上面的通用语法即可,
GROUP_CONCAT是原生函数 - PostgreSQL / SQL Server 把
GROUP_CONCAT替换为STRING_AGG,其它逻辑不变 - Oracle 把
GROUP_CONCAT替换为LISTAGG(拼接内容, '<br>') WITHIN GROUP (ORDER BY time)即可
注意事项
- 记得把代码里的
你的表名替换为实际业务表名 - 如果日期是动态值(不止周一、周二),需要结合动态SQL实现动态列透视
- 如果你不需要HTML换行,把
<br>替换为空格、逗号等其它分隔符即可
内容的提问来源于stack exchange,提问作者ran-de-vouz
相关产品推荐
相关产品推荐

