2011-07-28 13 views
3

私のMySQLデータベースは、次の列見出しを持っていますMySQLのクエリとピボットテーブル

month, typeOfWork, totalHours 

は私がtypeOfWork、月に応じて結果を表示するに興味を持っています。たとえば、すべての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 

私は現在、(「から12月ROLLUPに至るまで」)最後の行を指定する構文エラーを取得しています。私の混乱は、私がスクリプト内の別の作業ピボットテーブルからこのテーブルを変更したという事実から来ています。私はその違いが私の2つの要件にあると思う(sumはtotalHours、monthは列名に等しく、typeOfWorkはtypeOfWorkと同じ列)。私のIF文がAND節を必要とするかどうか疑問に思っていますか?

誰でもこのピボットテーブルで正しい方向に向けることができますか?大変感謝しています。ありがとうございました!

答えて

5

あなたの質問は正しいです。 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 
+0

あなたは私のヒーローです。これはトリックでした!私はそれを推測したことはありませんでした。とても感謝しています。 :) – Andrew