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

MySQL透视查询时其他必填列返回NULL的问题求助

解决透视表查询只返回部分字段值的问题

嘿,我来帮你搞定这个透视查询的问题!你遇到的核心问题是没有对CASE表达式的结果使用聚合函数,导致GROUP BY之后只返回了每组的第一条匹配记录,其他字段自然都是NULL。

问题分析

你的原始查询里,GROUP BY JobId会把相同JobId的记录分组,但CASE语句只是判断当前行的FieldName是否匹配,没有聚合操作的话,数据库会默认返回每组中的任意一条记录——恰好每组里第一条记录都是Customer Id,所以只有customer_id有值,其他字段都是NULL。

修正后的查询语句

我们只需要给每个CASE表达式加上聚合函数(比如MAX()或者MIN(),因为每个JobId下每个FieldName只会出现一次,两者效果一样),就能正确提取每个分组里对应字段的值:

SELECT
  MAX(CASE WHEN FieldName = 'Customer Id' THEN FieldValue END) AS customer_id,
  MAX(CASE WHEN FieldName = 'Order Number' THEN FieldValue END) AS order_number,
  MAX(CASE WHEN FieldName = 'Architect Id' THEN FieldValue END) AS architect_id
FROM table1
GROUP BY JobId;

为什么这样有效?

  • 对于每个JobId分组,MAX(CASE ...)会遍历组内所有记录,找到FieldName匹配的那条记录的FieldValue,忽略其他NULL的情况(因为CASE不匹配时返回NULL,MAX会自动忽略NULL值)。
  • 像JobId=3的情况,没有Order Number这条记录,对应的CASE结果全是NULL,所以MAX()返回NULL,正好符合你想要的结果。

执行这个查询后,就能得到你期望的透视表结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 06:17:29