2011-07-28 165 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 

我目前得到一個語法錯誤,指定的最後一行(從「DEC通過對ROLLUP」)。我的困惑來自於這樣一個事實,即我簡單地從腳本中的另一個工作數據透視表中調整了此表。我認爲這種差異可能出現在我的兩個要求中(總和爲小時,其中月份等於列名,AND 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