Skip to content

Instantly share code, notes, and snippets.

@ibejohn818
Last active August 29, 2015 14:28
Show Gist options
  • Save ibejohn818/cba37c90af8c0302716c to your computer and use it in GitHub Desktop.
Save ibejohn818/cba37c90af8c0302716c to your computer and use it in GitHub Desktop.
Dynamic SQL Pivot
SET @sql = NULL;
SELECT
GROUP_CONCAT(
CONCAT(
'MAX(IF(cf.name =''',
name,
''',cv.field_value,NULL)) AS ',
'`',
name,
'`'
)
) INTO @sql
FROM user_account_custom_fields
WHERE visible = 1;
SET @sql = CONCAT(
'SELECT ua.id,ua.email,',
@sql,
' FROM user_accounts ua',
' LEFT JOIN user_account_custom_field_values cv ON (cv.user_account_id=ua.id)',
' LEFT JOIN user_account_custom_fields cf ON (cf.id = cv.user_account_custom_field_id)',
' GROUP BY ua.id'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
========================================================
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(md.metakey = ''',
metakey,
''', md.metavalue, NULL)) AS ',
metakey
)
) INTO @sql
FROM metadata;
SET @sql = CONCAT('SELECT s.id, s.name,',
@sql,
' FROM subjects s
LEFT JOIN metadata md
ON s.id = md.subject_id
GROUP BY s.id
ORDER BY color ASC
');
PREPARE stmt FROM @sql;
EXECUTE stmt;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment