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
相关产品推荐
相关产品推荐

