2016-06-30 4 views
0

誰かが助けてくれると思いますが、私は悲しみを引き起こすSQL文を持っています。MySQL Pivotテーブルを使用しているときの動的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 

My表は、この表の特定の行に複数の行が適用される可変表を含むいくつかの表を結合します。

したがって、列の名前を '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)AS' '、uv.name、' ')) INTO @ SQL FROM tbl_user_variables; MySQLは言った:ドキュメント #1054 - 'フィールドリスト'の 'uv.user_type_variables_id'が不明な列 – gsusonline

+0

@gsusonlineそれを更新してください。 – Blank

+0

ありがとう、次のエラーが表示されます:#1243 - EXECUTEに与えられた未知のプリペアドステートメントハンドラ(stmt) – gsusonline

関連する問題