2016-06-30 1 views
0

누군가 도움이 될지 궁금하게 생각하는 SQL 문은 저를 슬프게합니다.MySQL 피벗 테이블을 사용할 때의 동적 AS

MAX 사례()를 사용하여 피벗 테이블로 작동하는 나의 문장은 올바르게 작동하지만 수동으로 AS 열 이름을 적용하고 있습니다.이 작업은 동적으로 수행 할 수 있습니까?

다음은 현재 나의 진술입니다.

SELECT 
u.prefix AS 'Title', 
u.forename AS 'Forename', 
u.surname AS 'Surname', 
u.email AS 'Email Address', 
u.update_time AS 'Register Date', 
eg.name AS 'Event Group Registered', 
e.name AS 'Session Registered', 
MAX(CASE WHEN uv.user_type_variables_id = 1 THEN uv.value ELSE NULL END) AS 'Question2', 
MAX(CASE WHEN uv.user_type_variables_id = 2 THEN uv.value ELSE NULL END) AS 'Question2', 
MAX(CASE WHEN uv.user_type_variables_id = 3 THEN uv.value ELSE NULL END) AS 'Question1', 
MAX(CASE WHEN uv.user_type_variables_id = 4 THEN uv.value ELSE NULL END) AS 'Question2', 
MAX(CASE WHEN uv.user_type_variables_id = 5 THEN uv.value ELSE NULL END) AS 'Question1', 
MAX(CASE WHEN uv.user_type_variables_id = 6 THEN uv.value ELSE NULL END) AS 'Question2' 

FROM tbl_event_attendees AS ea 

LEFT JOIN tbl_user AS u ON ea.user_id = u.id 
LEFT JOIN tbl_event AS e ON ea.event_id = e.id 
LEFT JOIN tbl_event_groups AS eg on e.group_id = eg.id 
LEFT JOIN tbl_user AS u2 ON ea.guest_of_user_id = u2.id 
LEFT JOIN tbl_user_variables AS uv on u.id = uv.user_id 

WHERE ea.event_id =6 
GROUP BY ea.id 

내 테이블은 변수 테이블을 포함하여 몇 개의 테이블을 함께 결합합니다.이 테이블에서는 여러 행이이 테이블의 특정 행에 적용됩니다.

그래서 열의 이름이 'Question1'이 아니라 'uv.value'에 적용되는 인접한 열 'name'이 필요합니다.

MAX(CASE WHEN uv.user_type_variables_id = 14 THEN uv.value ELSE NULL END) AS uv.name, 

누구에게 제안 할 수 있습니까? 당신 여부를 위해 작동하지만, 단지 그것을 시도

+0

당신은 테이블에 대한 자세한 내용을 제공해야합니다. – Blank

+0

안녕하세요, 내 성명서를 조금 넓혔습니다. – gsusonline

답변

0

확실하지)

SET @sql = NULL; 
SELECT 
    GROUP_CONCAT(DISTINCT 
    CONCAT(
     'MAX(CASE WHEN uv.user_type_variables_id = ''', 
     uv.user_type_variables_id, 
     ''' THEN uv.value ELSE NULL END) AS `', 
     uv.name, '`' 
    ) 
) INTO @sql 
FROM tbl_user_variables uv; 
SET @sql = CONCAT('SELECT 
     u.prefix AS ''Title'', 
     u.forename AS ''Forename'', 
     u.surname AS ''Surname'', 
     u.email AS ''Email Address'', 
     u.update_time AS ''Register Date'', 
     eg.name AS ''Event Group Registered'', 
     e.name AS ''Session Registered'', ', 
     @sql, 
     ' FROM tbl_event_attendees AS ea 
     LEFT JOIN tbl_user AS u ON ea.user_id = u.id 
     LEFT JOIN tbl_event AS e ON ea.event_id = e.id 
     LEFT JOIN tbl_event_groups AS eg on e.group_id = eg.id 
     LEFT JOIN tbl_user AS u2 ON ea.guest_of_user_id = u2.id 
     LEFT JOIN tbl_user_variables AS uv on u.id = uv.user_id 
     WHERE ea.event_id =6 
     GROUP BY ea.id'); 
PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
+0

응답 해 주셔서 감사합니다. 다음과 같은 오류 메시지가 표시됩니다. SELECT GROUP_CONCAT (DISTINCT CONCAT ('uv.user_type_variables_id =' '', uv.user_type_variables_id, '' 'uv.value ELSE NULL END)' ', uv.name,' ')) INTO @ SQL FROM tbl_user_variables; MySQL은 말했다 : 문서 # 1054- – gsusonline

+0

@gsusonline이 업데이트 '필드 목록'에서 알 수없는 열 'uv.user_type_variables_id은'제발 확인. – Blank

+0

감사합니다. 이제 다음 오류가 발생합니다. # 1243 - EXECUTE에 알 수없는 준비된 명령문 처리기 (stmt)가 부여되었습니다 – gsusonline