如何将SQL返回的同workitem_id多行数据合并为单行?
SQL修改方案
最终实现SQL
SELECT workitem_id, channel, MAX(CASE WHEN state = 'Created' THEN newimage_lastupdateddate ELSE NULL END) AS creation_date, MAX(CASE WHEN state = 'Disconnected' THEN newimage_lastupdateddate ELSE NULL END) AS disconnect_date FROM work_item GROUP BY workitem_id, channel;
方案说明
- 移除原SQL中的
DISTINCT,改用GROUP BY对workitem_id、channel两个字段分组,确保每个唯一的工单ID+渠道组合仅返回一行结果 - 用
MAX()聚合函数包裹原有CASE判断逻辑,利用聚合函数自动忽略NULL值的特性,直接提取对应状态下的非空时间值。如果你的业务场景中同一工单的同一个状态可能存在多条记录,需要取最早的时间可以将MAX替换为MIN,可根据实际业务需求调整 - 注意你示例结果中的
diconnect_date为拼写错误,上述SQL中已修正为标准拼写disconnect_date,如果需要保留原有拼写可自行修改别名 - 该写法兼容MySQL、PostgreSQL、Oracle、SQL Server等所有主流关系型数据库,通用性更强
内容的提问来源于stack exchange,提问作者Biswajeet Praharaj
相关产品推荐
相关产品推荐

