Преобразование записей 1 столбец 3 строки -> 1 строка 3 столбца - PullRequest
0 голосов
/ 03 июня 2010

Первый взгляд на запрос ниже

SELECT COUNT(id) AS total_record, id, modeller,
  MONTHNAME(completed_date) AS current_month,
  QUARTER(completed_date) AS current_quarter,
  Difficulty,
  YEAR(completed_date) AS current_year
FROM model
WHERE modeller != ''
  AND completed_date BETWEEN '2010-04-01'
  AND '2010-05-31' AND Difficulty != ''
GROUP BY Difficulty,
MONTH(completed_date) ORDER BY
MONTH(completed_date) ASC

Результаты, которые я получаю

Modeller  Month  Year  Difficulty

XYZ       Jan    2010  23

XYZ       Jan    2010  14

XYZ       Jan    2010  15

ABC       Feb    2010   5

ABC       Feb    2010  14

ABC       Feb    2010   6

Я хочу результат как

Modeller  Month  Year  Difficulty

XYZ       Jan    2010  23, 14, 15

ABC       Feb    2010  5, 14, 6

Моя база данных Mysql для приложения, которое я разрабатываю, поэтому любая помощь будет очень полезна.

Спасибо

Ответы [ 3 ]

2 голосов
/ 03 июня 2010

Посмотрите на GROUP_CONCAT

0 голосов
/ 03 июня 2010

Хорошо, функция GROUP_CONCAT очень полезна и, вероятно, является идеальным решением в этом случае.

Но обратите внимание, что в больших системах такого рода манипуляции могут относиться к прикладному уровню, а не к запросам к базе данных, максимально облегчая обслуживание, повторное использование и уменьшая зависимость в конкретной РСУБД.

Альтернатива (более спроектированная) - подождать, чтобы использовать шаблон DAO. Как указано в http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html

0 голосов
/ 03 июня 2010

Я думаю, что вы хотите GROUP_CONCAT(). Я упростил ваши поля, так что вам нужно будет добавить вычисления обратно, но что-то вроде этого должно сделать:

SELECT modeller, month, year, GROUP_CONCAT(DISTINCT Difficulty)
FROM Model
WHERE $conditions
GROUP BY modeller, month, year
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...