Сводная таблица MySQL - PullRequest
3 голосов
/ 14 мая 2011

В последние несколько дней я пытался найти ответ на эту проблему.Пока я не нашел ответа, этот сайт продолжает появляться в моих результатах поиска, поэтому я решил попробовать.Потрясающие параметры форматирования для сообщений.

У меня есть таблица типа:

user_id | form_id | question_id | data_label | data_value  
1         1         1             firstName    Joe  
1         1         2             lastName     Smith  
1         1         3             phone        5554443333  
2         1         1             firstName    Sally  
2         1         2             lastName     Jones  
2         1         3             phone        3334445555  

, которую я хочу превратить в:

user_id | firstName | lastName | phone  
1         Joe         Smith      5554443333  
2         Sally       Jones      3334445555  

Я могу найти пример того, каксделать это.Я их не очень хорошо понимаю, но они там.Моя уникальная проблема вступает в силу, когда эта единственная таблица содержит данные, введенные из различных форм с любым возможным числом полей.Итак, у меня может быть таблица с:

user_id | form_id | question_id | data_label | data_value  
1         1         1             firstName    Joe  
1         1         2             lastName     Smith  
1         1         3             phone        5554443333  
2         1         1             firstName    Sally  
2         1         2             lastName     Jones  
2         1         3             phone        3334445555  
3         2         1             fav_color    red  
3         2         2             fav_animal   eagle  
4         2         1             fav_color    blue  
4         2         2             fav_animal   dog  

Затем я передам form_id в качестве параметра, соберу все записи из этой формы, сгруппированные пользователями (все они должны иметь одинаковые метки с разными значениями)и затем отобразить эти данные как:

... когда form_id = 1, отчет выглядит так:

user_id | firstName | lastName | phone  
1         Joe         Smith      5554443333  
2         Sally       Jones      3334445555  

... когда form_id = 2, отчет выглядит так:

user_id | fav_color | fav_animal  
3         red         eagle  
4         blue        dog  

Я новичок в продвинутом программировании и процедурах SQL и не могу понять, как это сделать самостоятельно.Мне нужно, чтобы запрос мог обрабатывать любое число / тип полей без необходимости ввода точных возможных имен полей в запросе для каждой формы.Обратите внимание, что первый запрос, приведенный выше, имеет четыре поля, а второй - 3. Таким образом, решение должно быть гибким в этом смысле.

SQL также может быть сгенерирован из языка программирования, так что есть больше вариантов с этим решениемесли это поможет.

Пожалуйста, сообщите мне, если у вас недостаточно информации.

1 Ответ

3 голосов
/ 14 мая 2011

Вы можете попробовать (не проверено) что-то вроде

select form_id, 
max(case data_label when 'lastName' then data_value else null end) as lastname, 
max(case data_label when 'firstName' then data_value else null end) as firstname,
max(case data_label when 'phone' then data_value else null end) as phone
from mytable 
group by form_id
...