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

SQL技术问题:如何将不同field_id的列值合并到同一ticket_id行?

解决方案:行转列实现同一ticket_id多字段值同行展示

这是典型的行转列需求,不用修改原表结构的话,有两种简单好用的方法可以实现你的目标:

方法一:条件聚合(推荐,通用型强)

核心思路是按ticket_id分组,通过CASE WHEN判断field_id,提取对应value,再用聚合函数(比如MAX)把同一分组下的目标值筛选出来。

假设你的表名叫ticket_fields,对应的SQL语句如下:

SELECT
  ticket_id AS ticket,
  MAX(CASE WHEN field_id = 16 THEN value END) AS PO#,
  MAX(CASE WHEN field_id = 7 THEN value END) AS Est Hours
FROM ticket_fields
WHERE field_id IN (7, 16) -- 只筛选需要的field_id,提升性能
GROUP BY ticket_id
ORDER BY ticket_id;

为什么用MAX?

因为每个ticket_id对应每个field_id只有一条记录,MAX会直接取出唯一的那个值;你也可以用SUM或者MIN,效果完全一样,只是MAX语义上更贴合“取唯一值”的场景。

方法二:自连接(适合少量字段的场景)

如果只需要转两三个字段,也可以用自连接的方式,把表分别关联两次,各自匹配对应的field_id:

SELECT
  t1.ticket_id AS ticket,
  t1.value AS PO#,
  t2.value AS Est Hours
FROM ticket_fields t1
JOIN ticket_fields t2 ON t1.ticket_id = t2.ticket_id
WHERE t1.field_id = 16 AND t2.field_id = 7
ORDER BY t1.ticket_id;

注意点

如果某个ticket_id只存在其中一个field_id的记录,自连接会把这条记录过滤掉;而条件聚合会保留它,对应字段显示为NULL,你可以根据业务需求选择。

这两种方法都不需要修改原表结构,执行后就能得到你想要的结果:

+--ticket--+--PO#--+--Est Hours--+
+ 423      + PO123 + 17          +
+ 344      + PO101 + 24          +
+--------------------------------+

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:05:39