2013-12-26 3 views
1

У меня есть база данных MySQL с таблицей ответов опроса с тремя важными полями (переименованными для ясности): SURVEY_TAKER_ID, QUESTION_NUMBER и RESPONSE. Предполагая, что обследование на 3-вопрос в качестве примера, это будет выглядеть примерно так:Как вернуть упорядоченные данные из нескольких записей в одну запись в MySQL?

SURVEY_TAKER_ID | QUESTION_NUMBER | RESPONSE 
---------------------------------------- 
101    1     Apple 
102    1     Orange 
103    1     Banana 
101    2     Morning 
102    2     Evening 
103    2     Afternoon 
101    3     Red 
102    3     Blue 
103    3     Yellow 

Я хотел бы создать запрос на выборку, который выводит идентификатор и ответов каждого обследования берущего в порядке по номеру вопроса, например:

101,Apple,Morning,Red 
102,Orange,Evening,Blue 
103,Banana,Afternoon,Yellow 

Я знаю, что SQL Server имеет FOR XML, что может сделать это проще, но моя база данных находится в MySQL, и я должен признать, что на самом деле я не настолько разбираюсь в SQL. Может кто-нибудь, пожалуйста, дайте мне пример запроса, который приведет к выходу выше, или укажите мне способ сделать это?

Большое спасибо всем, кто может помочь ...

... Jay

+0

'ORDER BY' и' GROUP_CONCAT' –

+0

Указывая вам способ сделать это ==> Http: // mahmudahsan.wordpress.com/2008/08/27/mysql-the-group_concat-function/ –

ответ

0

SURVEY_TAKER_ID с "QUESTION_NUMBER: ОПРОСА" стиль concating:

SQL Fiddle

SELECT SURVEY_TAKER_ID 
     ,GROUP_CONCAT(CONCAT(QUESTION_NUMBER, ': ', RESPONSE) ORDER BY QUESTION_NUMBER SEPARATOR ', ') AS RESPONSES 
FROM Table1 
GROUP BY SURVEY_TAKER_ID 
ORDER BY SURVEY_TAKER_ID 

.

SURVEY_TAKER_ID с "Отклик" только в стиле concating:

SQL Fiddle

SELECT SURVEY_TAKER_ID 
     ,GROUP_CONCAT(RESPONSE ORDER BY QUESTION_NUMBER SEPARATOR ', ') AS RESPONSES 
FROM Table1 
GROUP BY SURVEY_TAKER_ID 
ORDER BY SURVEY_TAKER_ID 
+0

Большое спасибо, Билл. Я дам им попробовать и отчитаться! –

+0

Привет, Билл. Большое спасибо за это. От взгляда на вывод SQL Fiddle моя единственная проблема заключается в том, что там нет никакого контроля, чтобы убедиться, что вывод 'RESPONSE' упорядочен по' QUESTION_NUMBER'. Есть ли способ добавить это? Я попытался помещать предложение ORDER BY в круглые скобки после «RESPONSE SEPARATOR», но SQL Fiddle выдал ошибку. –

+0

Эй, Джей. Я считаю, что вы, возможно, помещали ORDER BY в функцию CONCAT, а не в GROUP_CONCAT. Мой первый блок кода имеет CONCAT, встроенный в GROUP_CONCAT. Я обновил свой ответ с помощью ORDER BY, которые, похоже, работают и связаны с новыми скриптами URS. Я также заказал внешние результаты с помощью SURVEY_tAKER_ID. –

0

Попробуйте это:

SELECT CONCAT(SURVEY_TAKER_ID, ',', RESPONSE) 
FROM (SELECT SURVEY_TAKER_ID, GROUP_CONCAT(RESPONSE) RESPONSE 
     FROM (SELECT * FROM SURVEY ORDER BY SURVEY_TAKER_ID, QUESTION_NUMBER) A 
     GROUP BY SURVEY_TAKER_ID 
    ) A 
+0

Большое спасибо, Saharsh. Я попробую и отправлю отчет! –

+0

Привет Saharsh. Спасибо, но это все ответы на заданный вопрос в каждой записи. Я старался поместить все ответы для каждого опроса в каждой записи. Я ценю вашу помощь, хотя! –

+0

@JayinNJ Проверьте мой обновленный ответ. Я изменил предложение group by от 'QUESTION_NUMBER' до' SURVEY_TAKER_ID' –

Смежные вопросы