MySQL如何实现Pivot行转列?自定义查询SQL执行报错求助
问题原因与修复方案
你编写的SQL存在两处语法问题:
IF判断逻辑中,luckystar、pilchards、nespresso是要匹配的字符串值,未加单引号包裹,数据库会将其识别为字段名检索,找不到对应字段就会触发报错。- SELECT子句中同时查询了
fname和lname两个字段,但GROUP BY只指定了fname,如果数据库开启了默认的ONLY_FULL_GROUP_BY规则,也会触发语法错误。
修正后的代码
SELECT fname, lname, SUM(IF(agedescription = 'luckystar', agenumber, NULL)) AS luckystar, SUM(IF(agedescription = 'pilchards', agenumber, NULL)) AS pilchards, SUM(IF(agedescription = 'nespresso', agenumber, NULL)) AS nespresso FROM users GROUP BY fname, lname;
如果业务逻辑中同一个fname对应的lname唯一,也可以使用下方写法兼容低版本SQL规则:
SELECT fname, MAX(lname) AS lname, SUM(IF(agedescription = 'luckystar', agenumber, NULL)) AS luckystar, SUM(IF(agedescription = 'pilchards', agenumber, NULL)) AS pilchards, SUM(IF(agedescription = 'nespresso', agenumber, NULL)) AS nespresso FROM users GROUP BY fname;
以上写法兼容性较强,适配MySQL、PostgreSQL等绝大多数主流数据库,执行后即可得到你需要的行转列结果。如果使用的是支持原生PIVOT语法的数据库(如SQL Server、Oracle),也可以替换为对应PIVOT函数实现。
内容的提问来源于stack exchange,提问作者user14724102
相关产品推荐
相关产品推荐

