我的MySQL数据库有以下列标题:
month, typeOfWork, totalHours
我有兴趣根据typeOfWork和month显示结果.例如,所有typeOfWork条目将显示在左侧的第一列中,并且每个字段将在每个列的指定月份中累计该特定typeOfWork.因此,我的SQL数据透视表语句目前是:
SELECT
IFNULL(typeOfWork, 'Total') AS TypeOfWork,
SUM(IF(month='JAN',totalHours,NULL)) AS JAN,
SUM(IF(month='FEB',totalHours,NULL)) AS FEB,
SUM(IF(month='MAR',totalHours,NULL)) AS MAR,
SUM(IF(month='APR',totalHours,NULL)) AS APR,
SUM(IF(month='MAY',totalHours,NULL)) AS MAY,
SUM(IF(month='JUN',totalHours,NULL)) AS JUN,
SUM(IF(month='JUL',totalHours,NULL)) AS JUL,
SUM(IF(month='AUG',totalHours,NULL)) AS AUG,
SUM(IF(month='SEP',totalHours,NULL)) AS SEP,
SUM(IF(month='OCT',totalHours,NULL)) AS OCT,
SUM(IF(month='NOV',totalHours,NULL)) AS NOV,
SUM(IF(month='DEC',totalHours,NULL)) AS DEC
FROM $databasetable GROUP BY typeOfWork
WITH ROLLUP
我目前收到指定最后一行的语法错误(从’DEC到ROLLUP’).我的困惑来自于我在我的脚本中简单地从另一个工作数据透视表中调整了这个表.我认为差异可能在于我的两个要求(sum totalHours,其中月份等于列名称,而typeOfWork等于第一列中的typeOfWork).我想知道我的IF语句是否需要AND条款?
任何人都可以通过此数据透视表向我指出正确的方向吗?这将不胜感激.谢谢!
解决方法:
您的查询是正确的.
只有一件事–DEC是MySQL reserved word,这个词不能直接用作对象标识符;所以,只需用反引号引用它 –
SELECT
IFNULL(typeOfWork, 'Total') AS TypeOfWork,
SUM(IF(month='JAN',totalHours,NULL)) AS JAN,
...
SUM(IF(month='DEC',totalHours,NULL)) AS `DEC`
FROM $databasetable GROUP BY typeOfWork
标签:sql,mysql,pivot 来源: https://codeday.me/bug/20190903/1795584.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。