2011-07-28 7 views
3

내 MySQL 데이터베이스가 다음과 같은 열 머리글 :MySQL의 쿼리 및 피벗 테이블

month, typeOfWork, totalHours 

나는 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월'에서) 마지막 줄을 지정하는 구문 오류를 받고 있어요. 내 혼란은 스크립트에서 다른 작업 피벗 테이블의이 테이블을 간단하게 적용한 사실에서 비롯된 것입니다. 나는 그 차이가 내 두 가지 요구 사항에있을 것이라고 생각한다. (sum totalHours 여기서 month는 열 이름과 같고 typeOfWork는 typeOfWork와 첫 번째 열을 같음). IF 문에 AND 절이 필요한지 궁금합니다.

아무도 나를이 피벗 테이블로 올바른 방향으로 가리킬 수 있습니까? 대단히 감사하겠습니다. 고맙습니다!

답변

5

귀하의 질의가 정확합니다. DEC는 MySQL reserved word이고이 단어는 개체 식별자로 직접 사용할 수 없습니다. 그래서, 단지 backticks로 그것을 인용하십시오 -

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